summaryrefslogtreecommitdiffstats
path: root/vendor
diff options
context:
space:
mode:
authorChristopher Speller <crspeller@gmail.com>2017-03-13 12:54:22 -0400
committerGitHub <noreply@github.com>2017-03-13 12:54:22 -0400
commitc281ee3b61e8ab53ff118866d72618ae8cce582b (patch)
tree776e7bdf6c8bfbb9a1dee5976496ab065959991f /vendor
parent3ada7a41a7fb13abef19dd63dc56b720900dbaa9 (diff)
downloadchat-c281ee3b61e8ab53ff118866d72618ae8cce582b.tar.gz
chat-c281ee3b61e8ab53ff118866d72618ae8cce582b.tar.bz2
chat-c281ee3b61e8ab53ff118866d72618ae8cce582b.zip
Updating server dependancies. Also adding github.com/jaytaylor/html2text and gopkg.in/gomail.v2 (#5748)
Diffstat (limited to 'vendor')
-rw-r--r--vendor/github.com/goamz/goamz/aws/aws.go1
-rw-r--r--vendor/github.com/goamz/goamz/aws/regions.go23
-rw-r--r--vendor/github.com/goamz/goamz/sqs/sqs.go2
-rw-r--r--vendor/github.com/golang/protobuf/descriptor/descriptor.go2
-rw-r--r--vendor/github.com/golang/protobuf/descriptor/descriptor_test.go2
-rw-r--r--vendor/github.com/golang/protobuf/protoc-gen-go/testdata/Makefile6
-rw-r--r--vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go7
-rw-r--r--vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go.golden7
-rw-r--r--vendor/github.com/jaytaylor/html2text/.gitignore24
-rw-r--r--vendor/github.com/jaytaylor/html2text/.travis.yml14
-rw-r--r--vendor/github.com/jaytaylor/html2text/LICENSE22
-rw-r--r--vendor/github.com/jaytaylor/html2text/README.md116
-rw-r--r--vendor/github.com/jaytaylor/html2text/html2text.go312
-rw-r--r--vendor/github.com/jaytaylor/html2text/html2text_test.go674
-rwxr-xr-xvendor/github.com/jaytaylor/html2text/testdata/utf8.html22
-rwxr-xr-xvendor/github.com/jaytaylor/html2text/testdata/utf8_with_bom.xhtml24
-rw-r--r--vendor/github.com/lib/pq/README.md2
-rw-r--r--vendor/github.com/lib/pq/conn.go92
-rw-r--r--vendor/github.com/lib/pq/conn_go18.go35
-rw-r--r--vendor/github.com/lib/pq/conn_test.go108
-rw-r--r--vendor/github.com/lib/pq/go18_test.go15
-rw-r--r--vendor/github.com/lib/pq/listen_example/doc.go24
-rw-r--r--vendor/github.com/lib/pq/notify_test.go24
-rw-r--r--vendor/github.com/lib/pq/oid/types.go12
-rw-r--r--vendor/github.com/lib/pq/ssl.go119
-rw-r--r--vendor/github.com/lib/pq/ssl_permissions.go16
-rw-r--r--vendor/github.com/lib/pq/ssl_test.go186
-rw-r--r--vendor/github.com/lib/pq/ssl_windows.go10
-rw-r--r--vendor/github.com/miekg/dns/README.md4
-rw-r--r--vendor/github.com/miekg/dns/client.go20
-rw-r--r--vendor/github.com/miekg/dns/client_test.go63
-rw-r--r--vendor/github.com/miekg/dns/clientconfig.go32
-rw-r--r--vendor/github.com/miekg/dns/clientconfig_test.go37
-rw-r--r--vendor/github.com/miekg/dns/compress_generate.go184
-rw-r--r--vendor/github.com/miekg/dns/dane.go9
-rw-r--r--vendor/github.com/miekg/dns/dns_test.go17
-rw-r--r--vendor/github.com/miekg/dns/dnssec.go21
-rw-r--r--vendor/github.com/miekg/dns/dnssec_keygen.go16
-rw-r--r--vendor/github.com/miekg/dns/dnssec_keyscan.go2
-rw-r--r--vendor/github.com/miekg/dns/edns.go12
-rw-r--r--vendor/github.com/miekg/dns/idn/punycode.go3
-rw-r--r--vendor/github.com/miekg/dns/msg.go188
-rw-r--r--vendor/github.com/miekg/dns/nsecx.go11
-rw-r--r--vendor/github.com/miekg/dns/parse_test.go6
-rw-r--r--vendor/github.com/miekg/dns/reverse.go4
-rw-r--r--vendor/github.com/miekg/dns/scan.go8
-rw-r--r--vendor/github.com/miekg/dns/scan_rr.go116
-rw-r--r--vendor/github.com/miekg/dns/server_test.go4
-rw-r--r--vendor/github.com/miekg/dns/sig0.go5
-rw-r--r--vendor/github.com/miekg/dns/smimea.go8
-rw-r--r--vendor/github.com/miekg/dns/tsig.go3
-rw-r--r--vendor/github.com/miekg/dns/types.go2
-rw-r--r--vendor/github.com/miekg/dns/types_generate.go2
-rw-r--r--vendor/github.com/miekg/dns/udp.go26
-rw-r--r--vendor/github.com/miekg/dns/udp_linux.go25
-rw-r--r--vendor/github.com/miekg/dns/udp_other.go6
-rw-r--r--vendor/github.com/miekg/dns/udp_plan9.go34
-rw-r--r--vendor/github.com/miekg/dns/udp_windows.go9
-rw-r--r--vendor/github.com/miekg/dns/update_test.go36
-rw-r--r--vendor/github.com/miekg/dns/zcompress.go119
-rw-r--r--vendor/github.com/miekg/dns/ztypes.go58
-rw-r--r--vendor/github.com/prometheus/client_model/AUTHORS.md13
-rw-r--r--vendor/github.com/prometheus/client_model/CONTRIBUTING.md8
-rw-r--r--vendor/github.com/prometheus/client_model/MAINTAINERS.md1
-rw-r--r--vendor/github.com/prometheus/common/AUTHORS.md11
-rw-r--r--vendor/github.com/prometheus/common/CONTRIBUTING.md6
-rw-r--r--vendor/github.com/prometheus/common/MAINTAINERS.md1
-rw-r--r--vendor/github.com/prometheus/common/model/value.go5
-rw-r--r--vendor/github.com/prometheus/common/model/value_test.go53
-rw-r--r--vendor/github.com/prometheus/procfs/AUTHORS.md21
-rw-r--r--vendor/github.com/prometheus/procfs/CONTRIBUTING.md6
-rw-r--r--vendor/github.com/prometheus/procfs/MAINTAINERS.md1
-rw-r--r--vendor/github.com/prometheus/procfs/README.md1
-rw-r--r--vendor/github.com/prometheus/procfs/buddyinfo.go95
-rw-r--r--vendor/github.com/prometheus/procfs/buddyinfo_test.go64
-rw-r--r--vendor/github.com/prometheus/procfs/fixtures/buddyinfo/short/buddyinfo3
-rw-r--r--vendor/github.com/prometheus/procfs/fixtures/buddyinfo/sizemismatch/buddyinfo3
-rw-r--r--vendor/github.com/prometheus/procfs/fixtures/buddyinfo/valid/buddyinfo3
-rw-r--r--vendor/github.com/prometheus/procfs/fixtures/fs/xfs/stat23
-rw-r--r--vendor/github.com/prometheus/procfs/fs.go13
-rw-r--r--vendor/github.com/prometheus/procfs/fs_test.go13
-rw-r--r--vendor/github.com/prometheus/procfs/ipvs_test.go16
-rw-r--r--vendor/github.com/prometheus/procfs/mdstat_test.go14
-rw-r--r--vendor/github.com/prometheus/procfs/mountstats.go4
-rw-r--r--vendor/github.com/prometheus/procfs/mountstats_test.go9
-rw-r--r--vendor/github.com/prometheus/procfs/xfs/parse.go361
-rw-r--r--vendor/github.com/prometheus/procfs/xfs/parse_test.go446
-rw-r--r--vendor/github.com/prometheus/procfs/xfs/xfs.go158
-rw-r--r--vendor/github.com/spf13/cobra/.travis.yml5
-rw-r--r--vendor/github.com/spf13/cobra/README.md3
-rw-r--r--vendor/github.com/spf13/cobra/command.go62
-rw-r--r--vendor/github.com/spf13/cobra/doc/man_docs.go4
-rw-r--r--vendor/github.com/spf13/cobra/doc/md_docs.go4
-rw-r--r--vendor/github.com/spf13/cobra/doc/util.go2
-rw-r--r--vendor/github.com/spf13/cobra/doc/yaml_docs.go4
-rw-r--r--vendor/github.com/tylerb/graceful/README.md5
-rw-r--r--vendor/github.com/tylerb/graceful/graceful.go1
-rw-r--r--vendor/github.com/xenolf/lego/README.md6
-rw-r--r--vendor/github.com/xenolf/lego/acme/client.go9
-rw-r--r--vendor/github.com/xenolf/lego/acme/client_test.go71
-rw-r--r--vendor/github.com/xenolf/lego/acme/error.go15
-rw-r--r--vendor/github.com/xenolf/lego/acme/http.go10
-rw-r--r--vendor/github.com/xenolf/lego/acme/jws.go93
-rw-r--r--vendor/github.com/xenolf/lego/providers/http/memcached/memcached.go3
-rw-r--r--vendor/golang.org/x/crypto/acme/acme.go119
-rw-r--r--vendor/golang.org/x/crypto/acme/acme_test.go117
-rw-r--r--vendor/golang.org/x/crypto/acme/autocert/autocert_test.go41
-rw-r--r--vendor/golang.org/x/crypto/acme/autocert/renewal_test.go2
-rw-r--r--vendor/golang.org/x/crypto/blake2b/blake2bAVX2_amd64.s696
-rw-r--r--vendor/golang.org/x/crypto/blake2b/register.go32
-rw-r--r--vendor/golang.org/x/crypto/blake2s/register.go21
-rw-r--r--vendor/golang.org/x/crypto/cryptobyte/asn1.go604
-rw-r--r--vendor/golang.org/x/crypto/cryptobyte/asn1_test.go285
-rw-r--r--vendor/golang.org/x/crypto/cryptobyte/builder.go255
-rw-r--r--vendor/golang.org/x/crypto/cryptobyte/cryptobyte_test.go379
-rw-r--r--vendor/golang.org/x/crypto/cryptobyte/example_test.go120
-rw-r--r--vendor/golang.org/x/crypto/cryptobyte/string.go157
-rw-r--r--vendor/golang.org/x/crypto/curve25519/const_amd64.h8
-rw-r--r--vendor/golang.org/x/crypto/curve25519/const_amd64.s4
-rw-r--r--vendor/golang.org/x/crypto/curve25519/freeze_amd64.s4
-rw-r--r--vendor/golang.org/x/crypto/curve25519/ladderstep_amd64.s20
-rw-r--r--vendor/golang.org/x/crypto/curve25519/mul_amd64.s4
-rw-r--r--vendor/golang.org/x/crypto/curve25519/square_amd64.s4
-rw-r--r--vendor/golang.org/x/crypto/ocsp/ocsp_test.go6
-rw-r--r--vendor/golang.org/x/crypto/poly1305/poly1305_test.go37
-rw-r--r--vendor/golang.org/x/crypto/poly1305/sum_ref.go1634
-rw-r--r--vendor/golang.org/x/crypto/ssh/agent/client_test.go2
-rw-r--r--vendor/golang.org/x/crypto/ssh/cipher.go62
-rw-r--r--vendor/golang.org/x/crypto/ssh/cipher_test.go68
-rw-r--r--vendor/golang.org/x/crypto/ssh/client_auth_test.go4
-rw-r--r--vendor/golang.org/x/crypto/ssh/common.go2
-rw-r--r--vendor/golang.org/x/crypto/ssh/handshake.go49
-rw-r--r--vendor/golang.org/x/crypto/ssh/handshake_test.go61
-rw-r--r--vendor/golang.org/x/crypto/ssh/mac.go10
-rw-r--r--vendor/golang.org/x/crypto/ssh/mux_test.go3
-rw-r--r--vendor/golang.org/x/crypto/ssh/server.go27
-rw-r--r--vendor/golang.org/x/crypto/ssh/transport.go32
-rw-r--r--vendor/golang.org/x/image/draw/draw.go42
-rw-r--r--vendor/golang.org/x/image/draw/gen.go2
-rw-r--r--vendor/golang.org/x/image/draw/go1_8.go49
-rw-r--r--vendor/golang.org/x/image/draw/go1_9.go57
-rw-r--r--vendor/golang.org/x/image/draw/impl.go96
-rw-r--r--vendor/golang.org/x/image/draw/stdlib_test.go6
-rw-r--r--vendor/golang.org/x/image/font/sfnt/cmap.go269
-rw-r--r--vendor/golang.org/x/image/font/sfnt/data.go68
-rw-r--r--vendor/golang.org/x/image/font/sfnt/example_test.go128
-rw-r--r--vendor/golang.org/x/image/font/sfnt/gen.go321
-rw-r--r--vendor/golang.org/x/image/font/sfnt/postscript.go111
-rw-r--r--vendor/golang.org/x/image/font/sfnt/proprietary_test.go479
-rw-r--r--vendor/golang.org/x/image/font/sfnt/sfnt.go561
-rw-r--r--vendor/golang.org/x/image/font/sfnt/sfnt_test.go370
-rw-r--r--vendor/golang.org/x/image/font/sfnt/truetype.go29
-rw-r--r--vendor/golang.org/x/image/font/testdata/cmapTest.sfd265
-rw-r--r--vendor/golang.org/x/image/font/testdata/cmapTest.ttfbin0 -> 2528 bytes
-rw-r--r--vendor/golang.org/x/image/testdata/go-turns-two-down-ab.pngbin21338 -> 21092 bytes
-rw-r--r--vendor/golang.org/x/image/testdata/go-turns-two-down-bl.pngbin18581 -> 18169 bytes
-rw-r--r--vendor/golang.org/x/image/testdata/go-turns-two-down-cr.pngbin19519 -> 19141 bytes
-rw-r--r--vendor/golang.org/x/image/testdata/go-turns-two-down-nn.pngbin21504 -> 21320 bytes
-rw-r--r--vendor/golang.org/x/image/testdata/go-turns-two-rotate-ab.pngbin7654 -> 7417 bytes
-rw-r--r--vendor/golang.org/x/image/testdata/go-turns-two-rotate-bl.pngbin7653 -> 7421 bytes
-rw-r--r--vendor/golang.org/x/image/testdata/go-turns-two-rotate-cr.pngbin7808 -> 7544 bytes
-rw-r--r--vendor/golang.org/x/image/testdata/go-turns-two-rotate-nn.pngbin4915 -> 5128 bytes
-rw-r--r--vendor/golang.org/x/image/testdata/go-turns-two-up-ab.pngbin9633 -> 9427 bytes
-rw-r--r--vendor/golang.org/x/image/testdata/go-turns-two-up-bl.pngbin9639 -> 9427 bytes
-rw-r--r--vendor/golang.org/x/image/testdata/go-turns-two-up-cr.pngbin10987 -> 10694 bytes
-rw-r--r--vendor/golang.org/x/image/testdata/go-turns-two-up-nn.pngbin1368 -> 1369 bytes
-rw-r--r--vendor/golang.org/x/image/testdata/tux-rotate-ab.pngbin3237 -> 3340 bytes
-rw-r--r--vendor/golang.org/x/image/testdata/tux-rotate-bl.pngbin3751 -> 3836 bytes
-rw-r--r--vendor/golang.org/x/image/testdata/tux-rotate-cr.pngbin3753 -> 3841 bytes
-rw-r--r--vendor/golang.org/x/image/testdata/tux-rotate-nn.pngbin3055 -> 3159 bytes
-rw-r--r--vendor/golang.org/x/net/bpf/vm_bpf_test.go7
-rw-r--r--vendor/golang.org/x/net/context/context.go30
-rw-r--r--vendor/golang.org/x/net/context/ctxhttp/ctxhttp_17_test.go1
-rw-r--r--vendor/golang.org/x/net/context/go17.go4
-rw-r--r--vendor/golang.org/x/net/context/pre_go17.go18
-rw-r--r--vendor/golang.org/x/net/dns/dnsmessage/message.go1418
-rw-r--r--vendor/golang.org/x/net/dns/dnsmessage/message_test.go575
-rw-r--r--vendor/golang.org/x/net/http2/client_conn_pool.go2
-rw-r--r--vendor/golang.org/x/net/http2/databuffer.go146
-rw-r--r--vendor/golang.org/x/net/http2/databuffer_test.go155
-rw-r--r--vendor/golang.org/x/net/http2/fixed_buffer.go60
-rw-r--r--vendor/golang.org/x/net/http2/fixed_buffer_test.go128
-rw-r--r--vendor/golang.org/x/net/http2/frame.go81
-rw-r--r--vendor/golang.org/x/net/http2/frame_test.go91
-rw-r--r--vendor/golang.org/x/net/http2/go18.go6
-rw-r--r--vendor/golang.org/x/net/http2/go18_test.go13
-rw-r--r--vendor/golang.org/x/net/http2/hpack/encode.go29
-rw-r--r--vendor/golang.org/x/net/http2/hpack/encode_test.go70
-rw-r--r--vendor/golang.org/x/net/http2/hpack/hpack.go104
-rw-r--r--vendor/golang.org/x/net/http2/hpack/hpack_test.go146
-rw-r--r--vendor/golang.org/x/net/http2/hpack/tables.go250
-rw-r--r--vendor/golang.org/x/net/http2/hpack/tables_test.go188
-rw-r--r--vendor/golang.org/x/net/http2/pipe.go2
-rw-r--r--vendor/golang.org/x/net/http2/server.go199
-rw-r--r--vendor/golang.org/x/net/http2/server_test.go155
-rw-r--r--vendor/golang.org/x/net/http2/transport.go9
-rw-r--r--vendor/golang.org/x/net/http2/transport_test.go2
-rw-r--r--vendor/golang.org/x/net/internal/netreflect/socket.go4
-rw-r--r--vendor/golang.org/x/net/internal/netreflect/socket_19.go37
-rw-r--r--vendor/golang.org/x/net/internal/netreflect/socket_posix.go1
-rw-r--r--vendor/golang.org/x/net/internal/netreflect/socket_stub.go1
-rw-r--r--vendor/golang.org/x/net/internal/netreflect/socket_test.go3
-rw-r--r--vendor/golang.org/x/net/internal/timeseries/timeseries.go2
-rw-r--r--vendor/golang.org/x/net/ipv4/doc.go12
-rw-r--r--vendor/golang.org/x/net/ipv4/endpoint.go8
-rw-r--r--vendor/golang.org/x/net/ipv4/go19_test.go11
-rw-r--r--vendor/golang.org/x/net/ipv4/ipv4_test.go22
-rw-r--r--vendor/golang.org/x/net/ipv4/packet.go6
-rw-r--r--vendor/golang.org/x/net/ipv4/payload_cmsg.go8
-rw-r--r--vendor/golang.org/x/net/ipv4/payload_nocmsg.go8
-rw-r--r--vendor/golang.org/x/net/ipv6/control.go2
-rw-r--r--vendor/golang.org/x/net/ipv6/dgramopt_posix.go4
-rw-r--r--vendor/golang.org/x/net/ipv6/dgramopt_stub.go4
-rw-r--r--vendor/golang.org/x/net/ipv6/doc.go12
-rw-r--r--vendor/golang.org/x/net/ipv6/endpoint.go4
-rw-r--r--vendor/golang.org/x/net/ipv6/go19_test.go11
-rw-r--r--vendor/golang.org/x/net/ipv6/ipv6_test.go22
-rw-r--r--vendor/golang.org/x/net/ipv6/payload_cmsg.go8
-rw-r--r--vendor/golang.org/x/net/ipv6/payload_nocmsg.go8
-rw-r--r--vendor/golang.org/x/net/lif/address.go4
-rw-r--r--vendor/golang.org/x/net/lif/binary.go49
-rw-r--r--vendor/golang.org/x/net/lif/link.go12
-rw-r--r--vendor/golang.org/x/net/lif/sys.go21
-rw-r--r--vendor/golang.org/x/net/lif/sys_solaris_amd64.s3
-rw-r--r--vendor/golang.org/x/net/lif/syscall.go5
-rw-r--r--vendor/golang.org/x/net/proxy/socks5.go57
-rw-r--r--vendor/golang.org/x/net/publicsuffix/table.go17901
-rw-r--r--vendor/golang.org/x/net/publicsuffix/table_test.go559
-rw-r--r--vendor/golang.org/x/net/route/address.go152
-rw-r--r--vendor/golang.org/x/net/route/binary.go2
-rw-r--r--vendor/golang.org/x/net/route/defs_darwin.go8
-rw-r--r--vendor/golang.org/x/net/route/defs_dragonfly.go8
-rw-r--r--vendor/golang.org/x/net/route/defs_freebsd.go8
-rw-r--r--vendor/golang.org/x/net/route/defs_netbsd.go8
-rw-r--r--vendor/golang.org/x/net/route/defs_openbsd.go12
-rw-r--r--vendor/golang.org/x/net/route/message.go8
-rw-r--r--vendor/golang.org/x/net/route/message_test.go129
-rw-r--r--vendor/golang.org/x/net/route/route.go59
-rw-r--r--vendor/golang.org/x/net/route/route_classic.go36
-rw-r--r--vendor/golang.org/x/net/route/route_openbsd.go35
-rw-r--r--vendor/golang.org/x/net/route/sys.go7
-rw-r--r--vendor/golang.org/x/net/route/sys_darwin.go45
-rw-r--r--vendor/golang.org/x/net/route/sys_dragonfly.go39
-rw-r--r--vendor/golang.org/x/net/route/sys_freebsd.go39
-rw-r--r--vendor/golang.org/x/net/route/sys_netbsd.go34
-rw-r--r--vendor/golang.org/x/net/route/sys_openbsd.go39
-rw-r--r--vendor/golang.org/x/net/route/syscall.go5
-rw-r--r--vendor/golang.org/x/net/route/syscall.s8
-rw-r--r--vendor/golang.org/x/net/route/zsys_darwin.go6
-rw-r--r--vendor/golang.org/x/net/route/zsys_dragonfly.go6
-rw-r--r--vendor/golang.org/x/net/route/zsys_freebsd_386.go6
-rw-r--r--vendor/golang.org/x/net/route/zsys_freebsd_amd64.go6
-rw-r--r--vendor/golang.org/x/net/route/zsys_freebsd_arm.go6
-rw-r--r--vendor/golang.org/x/net/route/zsys_netbsd.go6
-rw-r--r--vendor/golang.org/x/net/route/zsys_openbsd.go10
-rw-r--r--vendor/golang.org/x/net/webdav/internal/xml/marshal.go8
-rw-r--r--vendor/golang.org/x/net/webdav/internal/xml/read.go8
-rw-r--r--vendor/golang.org/x/net/webdav/internal/xml/xml.go6
-rw-r--r--vendor/golang.org/x/sys/unix/asm.s10
-rwxr-xr-xvendor/golang.org/x/sys/unix/mkall.sh4
-rwxr-xr-xvendor/golang.org/x/sys/unix/mkerrors.sh18
-rwxr-xr-xvendor/golang.org/x/sys/unix/mksyscall.pl25
-rwxr-xr-xvendor/golang.org/x/sys/unix/mksyscall_solaris.pl23
-rwxr-xr-xvendor/golang.org/x/sys/unix/mksysnum_linux.pl12
-rw-r--r--vendor/golang.org/x/sys/unix/syscall.go7
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_darwin.go2
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_dragonfly.go1
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_freebsd.go1
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_linux.go150
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go2
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_linux_s390x.go1
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_openbsd.go1
-rw-r--r--vendor/golang.org/x/sys/unix/types_linux.go8
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_linux_386.go49
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go56
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_linux_arm.go53
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go51
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_linux_mips.go55
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go48
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go48
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go46
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go51
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go48
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go47
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go46
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go37
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go38
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go51
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go37
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go35
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go52
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go52
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go52
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_linux_386.go60
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go61
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go59
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go58
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go60
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go61
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go61
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go60
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go61
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go61
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go61
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go61
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go32
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go32
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go32
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go34
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go34
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go41
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_linux_386.go37
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go22
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go35
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go15
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go25
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go9
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go9
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go25
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go11
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go18
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go5
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go2
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_linux_386.go18
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go18
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_linux_arm.go18
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go18
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_linux_mips.go18
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go18
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go18
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go18
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go18
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go18
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go18
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go18
-rw-r--r--vendor/gopkg.in/gomail.v2/.travis.yml8
-rw-r--r--vendor/gopkg.in/gomail.v2/CHANGELOG.md20
-rw-r--r--vendor/gopkg.in/gomail.v2/CONTRIBUTING.md20
-rw-r--r--vendor/gopkg.in/gomail.v2/LICENSE20
-rw-r--r--vendor/gopkg.in/gomail.v2/README.md97
-rw-r--r--vendor/gopkg.in/gomail.v2/auth.go67
-rw-r--r--vendor/gopkg.in/gomail.v2/auth_test.go156
-rw-r--r--vendor/gopkg.in/gomail.v2/doc.go5
-rw-r--r--vendor/gopkg.in/gomail.v2/example_test.go215
-rw-r--r--vendor/gopkg.in/gomail.v2/message.go302
-rw-r--r--vendor/gopkg.in/gomail.v2/message_test.go630
-rw-r--r--vendor/gopkg.in/gomail.v2/mime.go19
-rw-r--r--vendor/gopkg.in/gomail.v2/mime_go14.go16
-rw-r--r--vendor/gopkg.in/gomail.v2/send.go117
-rw-r--r--vendor/gopkg.in/gomail.v2/send_test.go80
-rw-r--r--vendor/gopkg.in/gomail.v2/smtp.go175
-rw-r--r--vendor/gopkg.in/gomail.v2/smtp_test.go254
-rw-r--r--vendor/gopkg.in/gomail.v2/writeto.go242
-rw-r--r--vendor/gopkg.in/yaml.v2/scannerc.go2
354 files changed, 26615 insertions, 14214 deletions
diff --git a/vendor/github.com/goamz/goamz/aws/aws.go b/vendor/github.com/goamz/goamz/aws/aws.go
index 49eed632e..a4d359160 100644
--- a/vendor/github.com/goamz/goamz/aws/aws.go
+++ b/vendor/github.com/goamz/goamz/aws/aws.go
@@ -71,6 +71,7 @@ var Regions = map[string]Region{
EUCentral.Name: EUCentral,
EUWest.Name: EUWest,
USEast.Name: USEast,
+ USEast2.Name: USEast2,
USWest.Name: USWest,
USWest2.Name: USWest2,
USGovWest.Name: USGovWest,
diff --git a/vendor/github.com/goamz/goamz/aws/regions.go b/vendor/github.com/goamz/goamz/aws/regions.go
index 94d79d46d..c75d41e11 100644
--- a/vendor/github.com/goamz/goamz/aws/regions.go
+++ b/vendor/github.com/goamz/goamz/aws/regions.go
@@ -46,6 +46,29 @@ var USEast = Region{
"https://streams.dynamodb.us-east-1.amazonaws.com",
}
+var USEast2 = Region{
+ "us-east-2",
+ "https://ec2.us-east-2.amazonaws.com",
+ "https://s3.amazonaws.com",
+ "",
+ true,
+ true,
+ "",
+ "",
+ "https://sns.us-east-2.amazonaws.com",
+ "https://sqs.us-east-2.amazonaws.com",
+ "https://iam.amazonaws.com",
+ "https://elasticloadbalancing.us-east-2.amazonaws.com",
+ "https://dynamodb.us-east-2.amazonaws.com",
+ ServiceInfo{"https://monitoring.us-east-2.amazonaws.com", V2Signature},
+ "https://autoscaling.us-east-1.amazonaws.com",
+ ServiceInfo{"https://rds.us-east-2.amazonaws.com", V2Signature},
+ "https://sts.amazonaws.com",
+ "https://cloudformation.us-east-2.amazonaws.com",
+ "https://ecs.us-east-2.amazonaws.com",
+ "https://streams.dynamodb.us-east-2.amazonaws.com",
+}
+
var USWest = Region{
"us-west-1",
"https://ec2.us-west-1.amazonaws.com",
diff --git a/vendor/github.com/goamz/goamz/sqs/sqs.go b/vendor/github.com/goamz/goamz/sqs/sqs.go
index 23f1951ab..b54b698a8 100644
--- a/vendor/github.com/goamz/goamz/sqs/sqs.go
+++ b/vendor/github.com/goamz/goamz/sqs/sqs.go
@@ -48,6 +48,8 @@ func NewFrom(accessKey, secretKey, region string) (*SQS, error) {
switch region {
case "us.east", "us.east.1":
aws_region = aws.USEast
+ case "us.east.2":
+ aws_region = aws.USEast2
case "us.west", "us.west.1":
aws_region = aws.USWest
case "us.west.2":
diff --git a/vendor/github.com/golang/protobuf/descriptor/descriptor.go b/vendor/github.com/golang/protobuf/descriptor/descriptor.go
index 83607ff6c..ac7e51bfb 100644
--- a/vendor/github.com/golang/protobuf/descriptor/descriptor.go
+++ b/vendor/github.com/golang/protobuf/descriptor/descriptor.go
@@ -43,7 +43,7 @@ import (
"io/ioutil"
"github.com/golang/protobuf/proto"
- protobuf "google.golang.org/genproto/protobuf"
+ protobuf "github.com/golang/protobuf/protoc-gen-go/descriptor"
)
// extractFile extracts a FileDescriptorProto from a gzip'd buffer.
diff --git a/vendor/github.com/golang/protobuf/descriptor/descriptor_test.go b/vendor/github.com/golang/protobuf/descriptor/descriptor_test.go
index 282a1e3a7..27b0729cb 100644
--- a/vendor/github.com/golang/protobuf/descriptor/descriptor_test.go
+++ b/vendor/github.com/golang/protobuf/descriptor/descriptor_test.go
@@ -6,7 +6,7 @@ import (
"github.com/golang/protobuf/descriptor"
tpb "github.com/golang/protobuf/proto/testdata"
- protobuf "google.golang.org/genproto/protobuf"
+ protobuf "github.com/golang/protobuf/protoc-gen-go/descriptor"
)
func TestMessage(t *testing.T) {
diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/Makefile b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/Makefile
index b1ac45c77..a0bf9fefd 100644
--- a/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/Makefile
+++ b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/Makefile
@@ -45,9 +45,9 @@ my_test/test.pb.go: my_test/test.proto
golden:
make -B my_test/test.pb.go
- sed -i '/return.*fileDescriptor/d' my_test/test.pb.go
- sed -i '/^var fileDescriptor/,/^}/d' my_test/test.pb.go
- sed -i '/proto.RegisterFile.*fileDescriptor/d' my_test/test.pb.go
+ sed -i -e '/return.*fileDescriptor/d' my_test/test.pb.go
+ sed -i -e '/^var fileDescriptor/,/^}/d' my_test/test.pb.go
+ sed -i -e '/proto.RegisterFile.*fileDescriptor/d' my_test/test.pb.go
gofmt -w my_test/test.pb.go
diff -w my_test/test.pb.go my_test/test.pb.go.golden
diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go
index 9ec3e1292..d8717d57d 100644
--- a/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go
+++ b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go
@@ -319,7 +319,7 @@ func (m *Reply) GetCompactKeys() []int32 {
type Reply_Entry struct {
KeyThatNeeds_1234Camel_CasIng *int64 `protobuf:"varint,1,req,name=key_that_needs_1234camel_CasIng,json=keyThatNeeds1234camelCasIng" json:"key_that_needs_1234camel_CasIng,omitempty"`
Value *int64 `protobuf:"varint,2,opt,name=value,def=7" json:"value,omitempty"`
- XMyFieldName_2 *int64 `protobuf:"varint,3,opt,name=_my_field_name_2,json=myFieldName2" json:"_my_field_name_2,omitempty"`
+ XMyFieldName_2 *int64 `protobuf:"varint,3,opt,name=_my_field_name_2,json=MyFieldName2" json:"_my_field_name_2,omitempty"`
XXX_unrecognized []byte `json:"-"`
}
@@ -389,6 +389,7 @@ var E_ReplyExtensions_Time = &proto.ExtensionDesc{
Field: 101,
Name: "my.test.ReplyExtensions.time",
Tag: "fixed64,101,opt,name=time",
+ Filename: "my_test/test.proto",
}
var E_ReplyExtensions_Carrot = &proto.ExtensionDesc{
@@ -397,6 +398,7 @@ var E_ReplyExtensions_Carrot = &proto.ExtensionDesc{
Field: 105,
Name: "my.test.ReplyExtensions.carrot",
Tag: "bytes,105,opt,name=carrot",
+ Filename: "my_test/test.proto",
}
var E_ReplyExtensions_Donut = &proto.ExtensionDesc{
@@ -405,6 +407,7 @@ var E_ReplyExtensions_Donut = &proto.ExtensionDesc{
Field: 101,
Name: "my.test.ReplyExtensions.donut",
Tag: "bytes,101,opt,name=donut",
+ Filename: "my_test/test.proto",
}
type OtherReplyExtensions struct {
@@ -832,6 +835,7 @@ var E_Tag = &proto.ExtensionDesc{
Field: 103,
Name: "my.test.tag",
Tag: "bytes,103,opt,name=tag",
+ Filename: "my_test/test.proto",
}
var E_Donut = &proto.ExtensionDesc{
@@ -840,6 +844,7 @@ var E_Donut = &proto.ExtensionDesc{
Field: 106,
Name: "my.test.donut",
Tag: "bytes,106,opt,name=donut",
+ Filename: "my_test/test.proto",
}
func init() {
diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go.golden b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go.golden
index 9ec3e1292..d8717d57d 100644
--- a/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go.golden
+++ b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go.golden
@@ -319,7 +319,7 @@ func (m *Reply) GetCompactKeys() []int32 {
type Reply_Entry struct {
KeyThatNeeds_1234Camel_CasIng *int64 `protobuf:"varint,1,req,name=key_that_needs_1234camel_CasIng,json=keyThatNeeds1234camelCasIng" json:"key_that_needs_1234camel_CasIng,omitempty"`
Value *int64 `protobuf:"varint,2,opt,name=value,def=7" json:"value,omitempty"`
- XMyFieldName_2 *int64 `protobuf:"varint,3,opt,name=_my_field_name_2,json=myFieldName2" json:"_my_field_name_2,omitempty"`
+ XMyFieldName_2 *int64 `protobuf:"varint,3,opt,name=_my_field_name_2,json=MyFieldName2" json:"_my_field_name_2,omitempty"`
XXX_unrecognized []byte `json:"-"`
}
@@ -389,6 +389,7 @@ var E_ReplyExtensions_Time = &proto.ExtensionDesc{
Field: 101,
Name: "my.test.ReplyExtensions.time",
Tag: "fixed64,101,opt,name=time",
+ Filename: "my_test/test.proto",
}
var E_ReplyExtensions_Carrot = &proto.ExtensionDesc{
@@ -397,6 +398,7 @@ var E_ReplyExtensions_Carrot = &proto.ExtensionDesc{
Field: 105,
Name: "my.test.ReplyExtensions.carrot",
Tag: "bytes,105,opt,name=carrot",
+ Filename: "my_test/test.proto",
}
var E_ReplyExtensions_Donut = &proto.ExtensionDesc{
@@ -405,6 +407,7 @@ var E_ReplyExtensions_Donut = &proto.ExtensionDesc{
Field: 101,
Name: "my.test.ReplyExtensions.donut",
Tag: "bytes,101,opt,name=donut",
+ Filename: "my_test/test.proto",
}
type OtherReplyExtensions struct {
@@ -832,6 +835,7 @@ var E_Tag = &proto.ExtensionDesc{
Field: 103,
Name: "my.test.tag",
Tag: "bytes,103,opt,name=tag",
+ Filename: "my_test/test.proto",
}
var E_Donut = &proto.ExtensionDesc{
@@ -840,6 +844,7 @@ var E_Donut = &proto.ExtensionDesc{
Field: 106,
Name: "my.test.donut",
Tag: "bytes,106,opt,name=donut",
+ Filename: "my_test/test.proto",
}
func init() {
diff --git a/vendor/github.com/jaytaylor/html2text/.gitignore b/vendor/github.com/jaytaylor/html2text/.gitignore
new file mode 100644
index 000000000..daf913b1b
--- /dev/null
+++ b/vendor/github.com/jaytaylor/html2text/.gitignore
@@ -0,0 +1,24 @@
+# Compiled Object files, Static and Dynamic libs (Shared Objects)
+*.o
+*.a
+*.so
+
+# Folders
+_obj
+_test
+
+# Architecture specific extensions/prefixes
+*.[568vq]
+[568vq].out
+
+*.cgo1.go
+*.cgo2.c
+_cgo_defun.c
+_cgo_gotypes.go
+_cgo_export.*
+
+_testmain.go
+
+*.exe
+*.test
+*.prof
diff --git a/vendor/github.com/jaytaylor/html2text/.travis.yml b/vendor/github.com/jaytaylor/html2text/.travis.yml
new file mode 100644
index 000000000..6c7f48efd
--- /dev/null
+++ b/vendor/github.com/jaytaylor/html2text/.travis.yml
@@ -0,0 +1,14 @@
+language: go
+go:
+ - tip
+ - 1.8
+ - 1.7
+ - 1.6
+ - 1.5
+ - 1.4
+ - 1.3
+ - 1.2
+notifications:
+ email:
+ on_success: change
+ on_failure: always
diff --git a/vendor/github.com/jaytaylor/html2text/LICENSE b/vendor/github.com/jaytaylor/html2text/LICENSE
new file mode 100644
index 000000000..24dc4abec
--- /dev/null
+++ b/vendor/github.com/jaytaylor/html2text/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Jay Taylor
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
diff --git a/vendor/github.com/jaytaylor/html2text/README.md b/vendor/github.com/jaytaylor/html2text/README.md
new file mode 100644
index 000000000..ac1124739
--- /dev/null
+++ b/vendor/github.com/jaytaylor/html2text/README.md
@@ -0,0 +1,116 @@
+# html2text
+
+[![Documentation](https://godoc.org/github.com/jaytaylor/html2text?status.svg)](https://godoc.org/github.com/jaytaylor/html2text)
+[![Build Status](https://travis-ci.org/jaytaylor/html2text.svg?branch=master)](https://travis-ci.org/jaytaylor/html2text)
+[![Report Card](https://goreportcard.com/badge/github.com/jaytaylor/html2text)](https://goreportcard.com/report/github.com/jaytaylor/html2text)
+
+### Converts HTML into text
+
+
+## Introduction
+
+Ensure your emails are readable by all!
+
+Turns HTML into raw text, useful for sending fancy HTML emails with a equivalently nicely formatted TXT document as a fallback (e.g. for people who don't allow HTML emails or have other display issues).
+
+html2text is a simple golang package for rendering HTML into plaintext.
+
+There are still lots of improvements to be had, but FWIW this has worked fine for my [basic] HTML-2-text needs.
+
+It requires go 1.x or newer ;)
+
+
+## Download the package
+
+```bash
+go get github.com/jaytaylor/html2text
+```
+
+## Example usage
+
+```go
+package main
+
+import (
+ "fmt"
+
+ "github.com/jaytaylor/html2text"
+)
+
+func main() {
+ inputHtml := `
+ <html>
+ <head>
+ <title>My Mega Service</title>
+ <link rel=\"stylesheet\" href=\"main.css\">
+ <style type=\"text/css\">body { color: #fff; }</style>
+ </head>
+
+ <body>
+ <div class="logo">
+ <a href="http://mymegaservice.com/"><img src="/logo-image.jpg" alt="Mega Service"/></a>
+ </div>
+
+ <h1>Welcome to your new account on my service!</h1>
+
+ <p>
+ Here is some more information:
+
+ <ul>
+ <li>Link 1: <a href="https://example.com">Example.com</a></li>
+ <li>Link 2: <a href="https://example2.com">Example2.com</a></li>
+ <li>Something else</li>
+ </ul>
+ </p>
+ </body>
+ </html>
+ `
+
+ text, err := html2text.FromString(inputHtml)
+ if err != nil {
+ panic(err)
+ }
+ fmt.Println(text)
+}
+```
+
+Output:
+```
+Mega Service ( http://mymegaservice.com/ )
+
+******************************************
+Welcome to your new account on my service!
+******************************************
+
+Here is some more information:
+
+* Link 1: Example.com ( https://example.com )
+* Link 2: Example2.com ( https://example2.com )
+* Something else
+```
+
+
+## Unit-tests
+
+Running the unit-tests is straightforward and standard:
+
+```bash
+go test
+```
+
+
+# License
+
+Permissive MIT license.
+
+
+## Contact
+
+You are more than welcome to open issues and send pull requests if you find a bug or want a new feature.
+
+If you appreciate this library please feel free to drop me a line and tell me! It's always nice to hear from people who have benefitted from my work.
+
+Email: jay at (my github username).com
+
+Twitter: [@jtaylor](https://twitter.com/jtaylor)
+
diff --git a/vendor/github.com/jaytaylor/html2text/html2text.go b/vendor/github.com/jaytaylor/html2text/html2text.go
new file mode 100644
index 000000000..2a013a039
--- /dev/null
+++ b/vendor/github.com/jaytaylor/html2text/html2text.go
@@ -0,0 +1,312 @@
+package html2text
+
+import (
+ "bytes"
+ "io"
+ "regexp"
+ "strings"
+ "unicode"
+
+ "github.com/ssor/bom"
+
+ "golang.org/x/net/html"
+ "golang.org/x/net/html/atom"
+)
+
+var (
+ spacingRe = regexp.MustCompile(`[ \r\n\t]+`)
+ newlineRe = regexp.MustCompile(`\n\n+`)
+)
+
+type textifyTraverseCtx struct {
+ Buf bytes.Buffer
+
+ prefix string
+ blockquoteLevel int
+ lineLength int
+ endsWithSpace bool
+ endsWithNewline bool
+ justClosedDiv bool
+}
+
+func (ctx *textifyTraverseCtx) traverse(node *html.Node) error {
+ switch node.Type {
+ default:
+ return ctx.traverseChildren(node)
+
+ case html.TextNode:
+ data := strings.Trim(spacingRe.ReplaceAllString(node.Data, " "), " ")
+ return ctx.emit(data)
+
+ case html.ElementNode:
+ return ctx.handleElementNode(node)
+ }
+}
+
+func (ctx *textifyTraverseCtx) handleElementNode(node *html.Node) error {
+ ctx.justClosedDiv = false
+ switch node.DataAtom {
+ case atom.Br:
+ return ctx.emit("\n")
+
+ case atom.H1, atom.H2, atom.H3:
+ subCtx := textifyTraverseCtx{}
+ if err := subCtx.traverseChildren(node); err != nil {
+ return err
+ }
+
+ str := subCtx.Buf.String()
+ dividerLen := 0
+ for _, line := range strings.Split(str, "\n") {
+ if lineLen := len([]rune(line)); lineLen-1 > dividerLen {
+ dividerLen = lineLen - 1
+ }
+ }
+ divider := ""
+ if node.DataAtom == atom.H1 {
+ divider = strings.Repeat("*", dividerLen)
+ } else {
+ divider = strings.Repeat("-", dividerLen)
+ }
+
+ if node.DataAtom == atom.H3 {
+ return ctx.emit("\n\n" + str + "\n" + divider + "\n\n")
+ }
+ return ctx.emit("\n\n" + divider + "\n" + str + "\n" + divider + "\n\n")
+
+ case atom.Blockquote:
+ ctx.blockquoteLevel++
+ ctx.prefix = strings.Repeat(">", ctx.blockquoteLevel) + " "
+ if err := ctx.emit("\n"); err != nil {
+ return err
+ }
+ if ctx.blockquoteLevel == 1 {
+ if err := ctx.emit("\n"); err != nil {
+ return err
+ }
+ }
+ if err := ctx.traverseChildren(node); err != nil {
+ return err
+ }
+ ctx.blockquoteLevel--
+ ctx.prefix = strings.Repeat(">", ctx.blockquoteLevel)
+ if ctx.blockquoteLevel > 0 {
+ ctx.prefix += " "
+ }
+ return ctx.emit("\n\n")
+
+ case atom.Div:
+ if ctx.lineLength > 0 {
+ if err := ctx.emit("\n"); err != nil {
+ return err
+ }
+ }
+ if err := ctx.traverseChildren(node); err != nil {
+ return err
+ }
+ var err error
+ if ctx.justClosedDiv == false {
+ err = ctx.emit("\n")
+ }
+ ctx.justClosedDiv = true
+ return err
+
+ case atom.Li:
+ if err := ctx.emit("* "); err != nil {
+ return err
+ }
+
+ if err := ctx.traverseChildren(node); err != nil {
+ return err
+ }
+
+ return ctx.emit("\n")
+
+ case atom.B, atom.Strong:
+ subCtx := textifyTraverseCtx{}
+ subCtx.endsWithSpace = true
+ if err := subCtx.traverseChildren(node); err != nil {
+ return err
+ }
+ str := subCtx.Buf.String()
+ return ctx.emit("*" + str + "*")
+
+ case atom.A:
+ // If image is the only child, take its alt text as the link text
+ if img := node.FirstChild; img != nil && node.LastChild == img && img.DataAtom == atom.Img {
+ if altText := getAttrVal(img, "alt"); altText != "" {
+ ctx.emit(altText)
+ }
+ } else if err := ctx.traverseChildren(node); err != nil {
+ return err
+ }
+
+ hrefLink := ""
+ if attrVal := getAttrVal(node, "href"); attrVal != "" {
+ attrVal = ctx.normalizeHrefLink(attrVal)
+ if attrVal != "" {
+ hrefLink = "( " + attrVal + " )"
+ }
+ }
+
+ return ctx.emit(hrefLink)
+
+ case atom.P, atom.Ul, atom.Table:
+ if err := ctx.emit("\n\n"); err != nil {
+ return err
+ }
+
+ if err := ctx.traverseChildren(node); err != nil {
+ return err
+ }
+
+ return ctx.emit("\n\n")
+
+ case atom.Tr:
+ if err := ctx.traverseChildren(node); err != nil {
+ return err
+ }
+
+ return ctx.emit("\n")
+
+ case atom.Style, atom.Script, atom.Head:
+ // Ignore the subtree
+ return nil
+
+ default:
+ return ctx.traverseChildren(node)
+ }
+}
+func (ctx *textifyTraverseCtx) traverseChildren(node *html.Node) error {
+ for c := node.FirstChild; c != nil; c = c.NextSibling {
+ if err := ctx.traverse(c); err != nil {
+ return err
+ }
+ }
+
+ return nil
+}
+
+func (ctx *textifyTraverseCtx) emit(data string) error {
+ if len(data) == 0 {
+ return nil
+ }
+ lines := ctx.breakLongLines(data)
+ var err error
+ for _, line := range lines {
+ runes := []rune(line)
+ startsWithSpace := unicode.IsSpace(runes[0])
+ if !startsWithSpace && !ctx.endsWithSpace {
+ ctx.Buf.WriteByte(' ')
+ ctx.lineLength++
+ }
+ ctx.endsWithSpace = unicode.IsSpace(runes[len(runes)-1])
+ for _, c := range line {
+ _, err = ctx.Buf.WriteString(string(c))
+ if err != nil {
+ return err
+ }
+ ctx.lineLength++
+ if c == '\n' {
+ ctx.lineLength = 0
+ if ctx.prefix != "" {
+ _, err = ctx.Buf.WriteString(ctx.prefix)
+ if err != nil {
+ return err
+ }
+ }
+ }
+ }
+ }
+ return nil
+}
+
+func (ctx *textifyTraverseCtx) breakLongLines(data string) []string {
+ // only break lines when we are in blockquotes
+ if ctx.blockquoteLevel == 0 {
+ return []string{data}
+ }
+ var ret []string
+ runes := []rune(data)
+ l := len(runes)
+ existing := ctx.lineLength
+ if existing >= 74 {
+ ret = append(ret, "\n")
+ existing = 0
+ }
+ for l+existing > 74 {
+ i := 74 - existing
+ for i >= 0 && !unicode.IsSpace(runes[i]) {
+ i--
+ }
+ if i == -1 {
+ // no spaces, so go the other way
+ i = 74 - existing
+ for i < l && !unicode.IsSpace(runes[i]) {
+ i++
+ }
+ }
+ ret = append(ret, string(runes[:i])+"\n")
+ for i < l && unicode.IsSpace(runes[i]) {
+ i++
+ }
+ runes = runes[i:]
+ l = len(runes)
+ existing = 0
+ }
+ if len(runes) > 0 {
+ ret = append(ret, string(runes))
+ }
+ return ret
+}
+
+func (ctx *textifyTraverseCtx) normalizeHrefLink(link string) string {
+ link = strings.TrimSpace(link)
+ link = strings.TrimPrefix(link, "mailto:")
+ return link
+}
+
+func getAttrVal(node *html.Node, attrName string) string {
+ for _, attr := range node.Attr {
+ if attr.Key == attrName {
+ return attr.Val
+ }
+ }
+
+ return ""
+}
+
+func FromHtmlNode(doc *html.Node) (string, error) {
+ ctx := textifyTraverseCtx{
+ Buf: bytes.Buffer{},
+ }
+ if err := ctx.traverse(doc); err != nil {
+ return "", err
+ }
+
+ text := strings.TrimSpace(newlineRe.ReplaceAllString(
+ strings.Replace(ctx.Buf.String(), "\n ", "\n", -1), "\n\n"))
+ return text, nil
+
+}
+
+func FromReader(reader io.Reader) (string, error) {
+ newReader, err := bom.NewReaderWithoutBom(reader)
+ if err != nil {
+ return "", err
+ }
+ doc, err := html.Parse(newReader)
+ if err != nil {
+ return "", err
+ }
+ return FromHtmlNode(doc)
+}
+
+func FromString(input string) (string, error) {
+ bs := bom.CleanBom([]byte(input))
+ text, err := FromReader(bytes.NewReader(bs))
+ if err != nil {
+ return "", err
+ }
+ return text, nil
+}
diff --git a/vendor/github.com/jaytaylor/html2text/html2text_test.go b/vendor/github.com/jaytaylor/html2text/html2text_test.go
new file mode 100644
index 000000000..b30d68ac9
--- /dev/null
+++ b/vendor/github.com/jaytaylor/html2text/html2text_test.go
@@ -0,0 +1,674 @@
+package html2text
+
+import (
+ "bytes"
+ "fmt"
+ "io/ioutil"
+ "path"
+ "regexp"
+ "strings"
+ "testing"
+)
+
+const (
+ destPath = "testdata"
+)
+
+func TestParseUTF8(t *testing.T) {
+ htmlFiles := []struct {
+ file string
+ keywordShouldNotExist string
+ keywordShouldExist string
+ }{
+ {
+ "utf8.html",
+ "学习之道:美国公认学习第一书title",
+ "次世界冠军赛上,我几近疯狂",
+ },
+ {
+ "utf8_with_bom.xhtml",
+ "1892年波兰文版序言title",
+ "种新的波兰文本已成为必要",
+ },
+ }
+
+ for _, htmlFile := range htmlFiles {
+ bs, err := ioutil.ReadFile(path.Join(destPath, htmlFile.file))
+ if err != nil {
+ t.Fatal(err)
+ }
+ text, err := FromReader(bytes.NewReader(bs))
+ if err != nil {
+ t.Fatal(err)
+ }
+ if !strings.Contains(text, htmlFile.keywordShouldExist) {
+ t.Fatalf("keyword %s should exists in file %s", htmlFile.keywordShouldExist, htmlFile.file)
+ }
+ if strings.Contains(text, htmlFile.keywordShouldNotExist) {
+ t.Fatalf("keyword %s should not exists in file %s", htmlFile.keywordShouldNotExist, htmlFile.file)
+ }
+ }
+}
+
+func TestStrippingWhitespace(t *testing.T) {
+ testCases := []struct {
+ input string
+ output string
+ }{
+ {
+ "test text",
+ "test text",
+ },
+ {
+ " \ttext\ntext\n",
+ "text text",
+ },
+ {
+ " \na \n\t \n \n a \t",
+ "a a",
+ },
+ {
+ "test text",
+ "test text",
+ },
+ {
+ "test&nbsp;&nbsp;&nbsp; text&nbsp;",
+ "test    text",
+ },
+ }
+
+ for _, testCase := range testCases {
+ assertString(t, testCase.input, testCase.output)
+ }
+}
+
+func TestParagraphsAndBreaks(t *testing.T) {
+ testCases := []struct {
+ input string
+ output string
+ }{
+ {
+ "Test text",
+ "Test text",
+ },
+ {
+ "Test text<br>",
+ "Test text",
+ },
+ {
+ "Test text<br>Test",
+ "Test text\nTest",
+ },
+ {
+ "<p>Test text</p>",
+ "Test text",
+ },
+ {
+ "<p>Test text</p><p>Test text</p>",
+ "Test text\n\nTest text",
+ },
+ {
+ "\n<p>Test text</p>\n\n\n\t<p>Test text</p>\n",
+ "Test text\n\nTest text",
+ },
+ {
+ "\n<p>Test text<br/>Test text</p>\n",
+ "Test text\nTest text",
+ },
+ {
+ "\n<p>Test text<br> \tTest text<br></p>\n",
+ "Test text\nTest text",
+ },
+ {
+ "Test text<br><BR />Test text",
+ "Test text\n\nTest text",
+ },
+ }
+
+ for _, testCase := range testCases {
+ assertString(t, testCase.input, testCase.output)
+ }
+}
+
+func TestTables(t *testing.T) {
+ testCases := []struct {
+ input string
+ output string
+ }{
+ {
+ "<table><tr><td></td><td></td></tr></table>",
+ "",
+ },
+ {
+ "<table><tr><td>cell1</td><td>cell2</td></tr></table>",
+ "cell1 cell2",
+ },
+ {
+ "<table><tr><td>row1</td></tr><tr><td>row2</td></tr></table>",
+ "row1\nrow2",
+ },
+ {
+ `<table>
+ <tr><td>cell1-1</td><td>cell1-2</td></tr>
+ <tr><td>cell2-1</td><td>cell2-2</td></tr>
+ </table>`,
+ "cell1-1 cell1-2\ncell2-1 cell2-2",
+ },
+ {
+ "_<table><tr><td>cell</td></tr></table>_",
+ "_\n\ncell\n\n_",
+ },
+ }
+
+ for _, testCase := range testCases {
+ assertString(t, testCase.input, testCase.output)
+ }
+}
+
+func TestStrippingLists(t *testing.T) {
+ testCases := []struct {
+ input string
+ output string
+ }{
+ {
+ "<ul></ul>",
+ "",
+ },
+ {
+ "<ul><li>item</li></ul>_",
+ "* item\n\n_",
+ },
+ {
+ "<li class='123'>item 1</li> <li>item 2</li>\n_",
+ "* item 1\n* item 2\n_",
+ },
+ {
+ "<li>item 1</li> \t\n <li>item 2</li> <li> item 3</li>\n_",
+ "* item 1\n* item 2\n* item 3\n_",
+ },
+ }
+
+ for _, testCase := range testCases {
+ assertString(t, testCase.input, testCase.output)
+ }
+}
+
+func TestLinks(t *testing.T) {
+ testCases := []struct {
+ input string
+ output string
+ }{
+ {
+ `<a></a>`,
+ ``,
+ },
+ {
+ `<a href=""></a>`,
+ ``,
+ },
+ {
+ `<a href="http://example.com/"></a>`,
+ `( http://example.com/ )`,
+ },
+ {
+ `<a href="">Link</a>`,
+ `Link`,
+ },
+ {
+ `<a href="http://example.com/">Link</a>`,
+ `Link ( http://example.com/ )`,
+ },
+ {
+ `<a href="http://example.com/"><span class="a">Link</span></a>`,
+ `Link ( http://example.com/ )`,
+ },
+ {
+ "<a href='http://example.com/'>\n\t<span class='a'>Link</span>\n\t</a>",
+ `Link ( http://example.com/ )`,
+ },
+ {
+ "<a href='mailto:contact@example.org'>Contact Us</a>",
+ `Contact Us ( contact@example.org )`,
+ },
+ {
+ "<a href=\"http://example.com:80/~user?aaa=bb&amp;c=d,e,f#foo\">Link</a>",
+ `Link ( http://example.com:80/~user?aaa=bb&c=d,e,f#foo )`,
+ },
+ {
+ "<a title='title' href=\"http://example.com/\">Link</a>",
+ `Link ( http://example.com/ )`,
+ },
+ {
+ "<a href=\" http://example.com/ \"> Link </a>",
+ `Link ( http://example.com/ )`,
+ },
+ {
+ "<a href=\"http://example.com/a/\">Link A</a> <a href=\"http://example.com/b/\">Link B</a>",
+ `Link A ( http://example.com/a/ ) Link B ( http://example.com/b/ )`,
+ },
+ {
+ "<a href=\"%%LINK%%\">Link</a>",
+ `Link ( %%LINK%% )`,
+ },
+ {
+ "<a href=\"[LINK]\">Link</a>",
+ `Link ( [LINK] )`,
+ },
+ {
+ "<a href=\"{LINK}\">Link</a>",
+ `Link ( {LINK} )`,
+ },
+ {
+ "<a href=\"[[!unsubscribe]]\">Link</a>",
+ `Link ( [[!unsubscribe]] )`,
+ },
+ {
+ "<p>This is <a href=\"http://www.google.com\" >link1</a> and <a href=\"http://www.google.com\" >link2 </a> is next.</p>",
+ `This is link1 ( http://www.google.com ) and link2 ( http://www.google.com ) is next.`,
+ },
+ }
+
+ for _, testCase := range testCases {
+ assertString(t, testCase.input, testCase.output)
+ }
+}
+
+func TestImageAltTags(t *testing.T) {
+ testCases := []struct {
+ input string
+ output string
+ }{
+ {
+ `<img />`,
+ ``,
+ },
+ {
+ `<img src="http://example.ru/hello.jpg" />`,
+ ``,
+ },
+ {
+ `<img alt="Example"/>`,
+ ``,
+ },
+ {
+ `<img src="http://example.ru/hello.jpg" alt="Example"/>`,
+ ``,
+ },
+ // Images do matter if they are in a link
+ {
+ `<a href="http://example.com/"><img src="http://example.ru/hello.jpg" alt="Example"/></a>`,
+ `Example ( http://example.com/ )`,
+ },
+ {
+ `<a href="http://example.com/"><img src="http://example.ru/hello.jpg" alt="Example"></a>`,
+ `Example ( http://example.com/ )`,
+ },
+ {
+ `<a href='http://example.com/'><img src='http://example.ru/hello.jpg' alt='Example'/></a>`,
+ `Example ( http://example.com/ )`,
+ },
+ {
+ `<a href='http://example.com/'><img src='http://example.ru/hello.jpg' alt='Example'></a>`,
+ `Example ( http://example.com/ )`,
+ },
+ }
+
+ for _, testCase := range testCases {
+ assertString(t, testCase.input, testCase.output)
+ }
+}
+
+func TestHeadings(t *testing.T) {
+ testCases := []struct {
+ input string
+ output string
+ }{
+ {
+ "<h1>Test</h1>",
+ "****\nTest\n****",
+ },
+ {
+ "\t<h1>\nTest</h1> ",
+ "****\nTest\n****",
+ },
+ {
+ "\t<h1>\nTest line 1<br>Test 2</h1> ",
+ "***********\nTest line 1\nTest 2\n***********",
+ },
+ {
+ "<h1>Test</h1> <h1>Test</h1>",
+ "****\nTest\n****\n\n****\nTest\n****",
+ },
+ {
+ "<h2>Test</h2>",
+ "----\nTest\n----",
+ },
+ {
+ "<h1><a href='http://example.com/'>Test</a></h1>",
+ "****************************\nTest ( http://example.com/ )\n****************************",
+ },
+ {
+ "<h3> <span class='a'>Test </span></h3>",
+ "Test\n----",
+ },
+ }
+
+ for _, testCase := range testCases {
+ assertString(t, testCase.input, testCase.output)
+ }
+
+}
+
+func TestBold(t *testing.T) {
+ testCases := []struct {
+ input string
+ output string
+ }{
+ {
+ "<b>Test</b>",
+ "*Test*",
+ },
+ {
+ "\t<b>Test</b> ",
+ "*Test*",
+ },
+ {
+ "\t<b>Test line 1<br>Test 2</b> ",
+ "*Test line 1\nTest 2*",
+ },
+ {
+ "<b>Test</b> <b>Test</b>",
+ "*Test* *Test*",
+ },
+ }
+
+ for _, testCase := range testCases {
+ assertString(t, testCase.input, testCase.output)
+ }
+
+}
+
+func TestDiv(t *testing.T) {
+ testCases := []struct {
+ input string
+ output string
+ }{
+ {
+ "<div>Test</div>",
+ "Test",
+ },
+ {
+ "\t<div>Test</div> ",
+ "Test",
+ },
+ {
+ "<div>Test line 1<div>Test 2</div></div>",
+ "Test line 1\nTest 2",
+ },
+ {
+ "Test 1<div>Test 2</div> <div>Test 3</div>Test 4",
+ "Test 1\nTest 2\nTest 3\nTest 4",
+ },
+ }
+
+ for _, testCase := range testCases {
+ assertString(t, testCase.input, testCase.output)
+ }
+
+}
+
+func TestBlockquotes(t *testing.T) {
+ testCases := []struct {
+ input string
+ output string
+ }{
+ {
+ "<div>level 0<blockquote>level 1<br><blockquote>level 2</blockquote>level 1</blockquote><div>level 0</div></div>",
+ "level 0\n> \n> level 1\n> \n>> level 2\n> \n> level 1\n\nlevel 0",
+ },
+ {
+ "<blockquote>Test</blockquote>Test",
+ "> \n> Test\n\nTest",
+ },
+ {
+ "\t<blockquote> \nTest<br></blockquote> ",
+ "> \n> Test\n>",
+ },
+ {
+ "\t<blockquote> \nTest line 1<br>Test 2</blockquote> ",
+ "> \n> Test line 1\n> Test 2",
+ },
+ {
+ "<blockquote>Test</blockquote> <blockquote>Test</blockquote> Other Test",
+ "> \n> Test\n\n> \n> Test\n\nOther Test",
+ },
+ {
+ "<blockquote>Lorem ipsum Commodo id consectetur pariatur ea occaecat minim aliqua ad sit consequat quis ex commodo Duis incididunt eu mollit consectetur fugiat voluptate dolore in pariatur in commodo occaecat Ut occaecat velit esse labore aute quis commodo non sit dolore officia Excepteur cillum amet cupidatat culpa velit labore ullamco dolore mollit elit in aliqua dolor irure do</blockquote>",
+ "> \n> Lorem ipsum Commodo id consectetur pariatur ea occaecat minim aliqua ad\n> sit consequat quis ex commodo Duis incididunt eu mollit consectetur fugiat\n> voluptate dolore in pariatur in commodo occaecat Ut occaecat velit esse\n> labore aute quis commodo non sit dolore officia Excepteur cillum amet\n> cupidatat culpa velit labore ullamco dolore mollit elit in aliqua dolor\n> irure do",
+ },
+ {
+ "<blockquote>Lorem<b>ipsum</b><b>Commodo</b><b>id</b><b>consectetur</b><b>pariatur</b><b>ea</b><b>occaecat</b><b>minim</b><b>aliqua</b><b>ad</b><b>sit</b><b>consequat</b><b>quis</b><b>ex</b><b>commodo</b><b>Duis</b><b>incididunt</b><b>eu</b><b>mollit</b><b>consectetur</b><b>fugiat</b><b>voluptate</b><b>dolore</b><b>in</b><b>pariatur</b><b>in</b><b>commodo</b><b>occaecat</b><b>Ut</b><b>occaecat</b><b>velit</b><b>esse</b><b>labore</b><b>aute</b><b>quis</b><b>commodo</b><b>non</b><b>sit</b><b>dolore</b><b>officia</b><b>Excepteur</b><b>cillum</b><b>amet</b><b>cupidatat</b><b>culpa</b><b>velit</b><b>labore</b><b>ullamco</b><b>dolore</b><b>mollit</b><b>elit</b><b>in</b><b>aliqua</b><b>dolor</b><b>irure</b><b>do</b></blockquote>",
+ "> \n> Lorem *ipsum* *Commodo* *id* *consectetur* *pariatur* *ea* *occaecat* *minim*\n> *aliqua* *ad* *sit* *consequat* *quis* *ex* *commodo* *Duis* *incididunt* *eu*\n> *mollit* *consectetur* *fugiat* *voluptate* *dolore* *in* *pariatur* *in* *commodo*\n> *occaecat* *Ut* *occaecat* *velit* *esse* *labore* *aute* *quis* *commodo*\n> *non* *sit* *dolore* *officia* *Excepteur* *cillum* *amet* *cupidatat* *culpa*\n> *velit* *labore* *ullamco* *dolore* *mollit* *elit* *in* *aliqua* *dolor* *irure*\n> *do*",
+ },
+ }
+
+ for _, testCase := range testCases {
+ assertString(t, testCase.input, testCase.output)
+ }
+
+}
+
+func TestIgnoreStylesScriptsHead(t *testing.T) {
+ testCases := []struct {
+ input string
+ output string
+ }{
+ {
+ "<style>Test</style>",
+ "",
+ },
+ {
+ "<style type=\"text/css\">body { color: #fff; }</style>",
+ "",
+ },
+ {
+ "<link rel=\"stylesheet\" href=\"main.css\">",
+ "",
+ },
+ {
+ "<script>Test</script>",
+ "",
+ },
+ {
+ "<script src=\"main.js\"></script>",
+ "",
+ },
+ {
+ "<script type=\"text/javascript\" src=\"main.js\"></script>",
+ "",
+ },
+ {
+ "<script type=\"text/javascript\">Test</script>",
+ "",
+ },
+ {
+ "<script type=\"text/ng-template\" id=\"template.html\"><a href=\"http://google.com\">Google</a></script>",
+ "",
+ },
+ {
+ "<script type=\"bla-bla-bla\" id=\"template.html\">Test</script>",
+ "",
+ },
+ {
+ `<html><head><title>Title</title></head><body></body></html>`,
+ "",
+ },
+ }
+
+ for _, testCase := range testCases {
+ assertString(t, testCase.input, testCase.output)
+ }
+}
+
+func TestText(t *testing.T) {
+ testCases := []struct {
+ input string
+ expr string
+ }{
+ {
+ `<li>
+ <a href="/new" data-ga-click="Header, create new repository, icon:repo"><span class="octicon octicon-repo"></span> New repository</a>
+ </li>`,
+ `\* New repository \( /new \)`,
+ },
+ {
+ `hi
+
+ <br>
+
+ hello <a href="https://google.com">google</a>
+ <br><br>
+ test<p>List:</p>
+
+ <ul>
+ <li><a href="foo">Foo</a></li>
+ <li><a href="http://www.microshwhat.com/bar/soapy">Barsoap</a></li>
+ <li>Baz</li>
+ </ul>
+`,
+ `hi
+hello google \( https://google.com \)
+
+test
+
+List:
+
+\* Foo \( foo \)
+\* Barsoap \( http://www.microshwhat.com/bar/soapy \)
+\* Baz`,
+ },
+ // Malformed input html.
+ {
+ `hi
+
+ hello <a href="https://google.com">google</a>
+
+ test<p>List:</p>
+
+ <ul>
+ <li><a href="foo">Foo</a>
+ <li><a href="/
+ bar/baz">Bar</a>
+ <li>Baz</li>
+ </ul>
+ `,
+ `hi hello google \( https://google.com \) test
+
+List:
+
+\* Foo \( foo \)
+\* Bar \( /\n[ \t]+bar/baz \)
+\* Baz`,
+ },
+ }
+
+ for _, testCase := range testCases {
+ assertRegexp(t, testCase.input, testCase.expr)
+ }
+}
+
+type StringMatcher interface {
+ MatchString(string) bool
+ String() string
+}
+
+type RegexpStringMatcher string
+
+func (m RegexpStringMatcher) MatchString(str string) bool {
+ return regexp.MustCompile(string(m)).MatchString(str)
+}
+func (m RegexpStringMatcher) String() string {
+ return string(m)
+}
+
+type ExactStringMatcher string
+
+func (m ExactStringMatcher) MatchString(str string) bool {
+ return string(m) == str
+}
+func (m ExactStringMatcher) String() string {
+ return string(m)
+}
+
+func assertRegexp(t *testing.T, input string, outputRE string) {
+ assertPlaintext(t, input, RegexpStringMatcher(outputRE))
+}
+
+func assertString(t *testing.T, input string, output string) {
+ assertPlaintext(t, input, ExactStringMatcher(output))
+}
+
+func assertPlaintext(t *testing.T, input string, matcher StringMatcher) {
+ text, err := FromString(input)
+ if err != nil {
+ t.Error(err)
+ }
+ if !matcher.MatchString(text) {
+ t.Errorf("Input did not match expression\n"+
+ "Input:\n>>>>\n%s\n<<<<\n\n"+
+ "Output:\n>>>>\n%s\n<<<<\n\n"+
+ "Expected output:\n>>>>\n%s\n<<<<\n\n",
+ input, text, matcher.String())
+ } else {
+ t.Logf("input:\n\n%s\n\n\n\noutput:\n\n%s\n", input, text)
+ }
+}
+
+func Example() {
+ inputHtml := `
+ <html>
+ <head>
+ <title>My Mega Service</title>
+ <link rel=\"stylesheet\" href=\"main.css\">
+ <style type=\"text/css\">body { color: #fff; }</style>
+ </head>
+
+ <body>
+ <div class="logo">
+ <a href="http://mymegaservice.com/"><img src="/logo-image.jpg" alt="Mega Service"/></a>
+ </div>
+
+ <h1>Welcome to your new account on my service!</h1>
+
+ <p>
+ Here is some more information:
+
+ <ul>
+ <li>Link 1: <a href="https://example.com">Example.com</a></li>
+ <li>Link 2: <a href="https://example2.com">Example2.com</a></li>
+ <li>Something else</li>
+ </ul>
+ </p>
+ </body>
+ </html>
+ `
+
+ text, err := FromString(inputHtml)
+ if err != nil {
+ panic(err)
+ }
+ fmt.Println(text)
+
+ // Output:
+ // Mega Service ( http://mymegaservice.com/ )
+ //
+ // ******************************************
+ // Welcome to your new account on my service!
+ // ******************************************
+ //
+ // Here is some more information:
+ //
+ // * Link 1: Example.com ( https://example.com )
+ // * Link 2: Example2.com ( https://example2.com )
+ // * Something else
+}
diff --git a/vendor/github.com/jaytaylor/html2text/testdata/utf8.html b/vendor/github.com/jaytaylor/html2text/testdata/utf8.html
new file mode 100755
index 000000000..53d401ce9
--- /dev/null
+++ b/vendor/github.com/jaytaylor/html2text/testdata/utf8.html
@@ -0,0 +1,22 @@
+<?xml version='1.0' encoding='utf-8'?>
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>学习之道:美国公认学习第一书title</title>
+ <link href="stylesheet.css" rel="stylesheet" type="text/css" />
+ <link href="page_styles.css" rel="stylesheet" type="text/css" />
+</head>
+
+<body class="calibre">
+ <p id="filepos9452" class="calibre_"><span class="calibre6"><span class="bold">写在前面的话</span></span>
+ </p>
+ <p class="calibre_12">在台湾的那次世界冠军赛上,我几近疯狂,直至两年后的今天,我仍沉浸在这次的经历中。这是我生平第一次如此深入地审视我自己,甚至是第一次尝试审视自己。这个过程令人很是兴奋,同时也有点感觉怪异。我重新认识了自我,看到了自己的另外一面,自己从未发觉的另外一面。为了生存,为了取胜,我成了一名角斗士,彻头彻尾,简单纯粹。我并没有意识到这一角色早已在我的心中生根发芽,呼之欲出。也许,他的出现已是不可避免。</p>
+ <p class="calibre_7">而我这全新的一面,与我一直熟识的那个乔希,那个曾经害怕黑暗的孩子,那个象棋手,那个狂热于雨水、反复诵读杰克·克鲁亚克作品的年轻人之间,又有什么样的联系呢?这些都是我正在努力弄清楚的问题。</p>
+ <p class="calibre_7">自台湾赛事之后,我急切非常,一心想要回到训练中去,摆脱自己已经达到巅峰的想法。在过去的两年中,我已经重新开始。这是一个新的起点。前方的路还很长,有待进一步的探索。</p>
+ <p class="calibre_7">这本书的创作耗费了相当多的时间和精力。在成长的过程中,我在我的小房间里从未想过等待我的会是这样的战斗。在创作中,我的思想逐渐成熟;爱恋从分崩离析,到失而复得,世界冠军头衔从失之交臂,到囊中取物。如果说在我人生的第一个二十九年中,我学到了什么,那就是,我们永远无法预测结局,无论是重要的比赛、冒险,还是轰轰烈烈的爱情。我们唯一可以肯定的只有,出乎意料。不管我们做了多么万全的准备,在生活的真实场景中,我们总是会处于陌生的境地。我们也许会无法冷静,失去理智,感觉似乎整个世界都在针对我们。在这个时候,我们所要做的是要付出加倍的努力,要表现得比预想得更好。我认为,关键在于准备好随机应变,准备好在所能想象的高压下发挥出创造力。</p>
+ <p class="calibre_7">读者朋友们,我非常希望你们在读过这本书后,可以得到启发,甚至会得到触动,从而能够根据各自的天赋与特长,去实现自己的梦想。这就是我写作此书的目的。我在字里行间所传达的理念曾经使我受益匪浅,我很希望它们可以为大家提供一个基本的框架和方向。如果我的方法言之有理,那么就请接受它,琢磨它,并加之自己的见解。忘记我的那些数字。真正的掌握需要通过自己发现一些最能够引起共鸣的信息,并将其彻底地融合进来,直至成为一体,这样我们才能随心所欲地驾驭它。</p>
+ <div class="mbp_pagebreak" id="calibre_pb_4"></div>
+</body>
+
+</html> \ No newline at end of file
diff --git a/vendor/github.com/jaytaylor/html2text/testdata/utf8_with_bom.xhtml b/vendor/github.com/jaytaylor/html2text/testdata/utf8_with_bom.xhtml
new file mode 100755
index 000000000..68f0ee707
--- /dev/null
+++ b/vendor/github.com/jaytaylor/html2text/testdata/utf8_with_bom.xhtml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN">
+
+<head>
+ <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
+ <title>1892年波兰文版序言title</title>
+ <link rel="stylesheet" href="css/stylesheet.css" type="text/css" />
+</head>
+
+<body>
+ <div id="page30" />
+ <h2 id="CHP2-6">1892年波兰文版序言<a id="wzyy_18_30" href="#wz_18_30"><sup>[18]</sup></a></h2>
+ <p>出版共产主义宣言的一种新的波兰文本已成为必要,这一事实,引起了许多感想。</p>
+ <p>首先值得注意的是,近来宣言在一定程度上已成为欧洲大陆大工业发展的一种尺度。一个国家的大工业越发展,该国工人中想认清自己作为工人阶级在有产阶级面前所处地位的要求就越增加,他们中间的社会主义运动也越扩大,因而对宣言的需求也越增长。这样,根据宣言用某国文字销行的份数,不仅能够相当确切地断定该国工人运动的状况,而且还能够相当确切地断定该国大工业发展的程度。</p>
+ <p>因此,波兰文的新版本标志着波兰工业的决定性进步。从十年前发表的上一个版本以来确实有了这种进步,对此丝毫不容置疑。俄国的波兰,会议的波兰<a id="wzyy_19_30" href="#wz_19_30"><sup>[19]</sup></a>,成了俄罗斯帝国巨大的工业区。俄国大工业是零星分散的,一部分在芬兰湾沿岸,一部分在中央区(莫斯科和弗拉基米尔),第三部分在黑海和亚速海沿岸,还有另一些散布在别处;而波兰工业则紧缩于相对狭小的地区,享受到由这种积聚引起的长处与短处。这种长处是竞争着的俄罗斯工厂主所承认的,他们要求实行保护关税以对付波兰,尽管他们渴望使波兰人俄罗斯化。这种短处,对波兰工厂主与俄罗斯政府来说,表现在社会主义思想在波兰工人中间的迅速传播和对宣言需求的增长。</p>
+ <p>但是,波兰工业的迅速发展——它超过了俄国工业——本身<a id="page31" />是波兰人民的坚强生命力的一个新证明,是波兰人民临近的民族复兴的一个新保证。而一个独立强盛的波兰的复兴,不只是一件同波兰人有关、而且是同我们大家有关的事情。只有当每个民族在自己内部完全自主时,欧洲各民族间真诚的国际合作才是可能的。1848年革命在无产阶级旗帜下,使无产阶级的战士最终只作了资产阶级的工作,这次革命通过自己遗嘱的执行者路易·波拿巴和俾斯麦也实现了意大利、德国和匈牙利的独立。然而波兰,它从1792年以来为革命做的比所有这三个国家总共做的还要多,而当它1863年失败于强大十倍的俄军的时候,人们却把它抛弃不顾了。贵族既未能保持住、也未能重新争得波兰的独立;今天波兰的独立对资产阶级至少是无所谓的。然而波兰的独立对于欧洲各民族和谐的合作是必需的。这种独立只有年轻的波兰无产阶级才能争得,而且在它的手中会很好地保持住。因为欧洲所有其余的工人都象波兰工人自己一样也需要波兰的独立。</p>
+ <p>弗·恩格斯</p>
+ <p>1892年2月10日于伦敦</p>
+ <div id="page74" />
+ <div><a id="wz_18_30" href="#wzyy_18_30">[18]</a> 恩格斯用德文为《宣言》新的波兰文本写了这篇序言。1892年由波兰社会主义者在伦敦办的《黎明》杂志社出版。序言寄出后,恩格斯写信给门德尔森(1892年2月11日),信中说,他很愿意学会波兰文,并且深入研究波兰工人运动的发展,以便能够为《宣言》的下一版写一篇更详细的序言。——第20页</div>
+ <div><a id="wz_19_30" href="#wzyy_19_30">[19]</a> 指维也纳会议的波兰,即根据1814—1815年维也纳会议的决定,以波兰王国的正式名义割给俄国的那部分波兰土地。——第20页</div>
+</body>
+
+</html> \ No newline at end of file
diff --git a/vendor/github.com/lib/pq/README.md b/vendor/github.com/lib/pq/README.md
index 5eb9e1445..7670fc87a 100644
--- a/vendor/github.com/lib/pq/README.md
+++ b/vendor/github.com/lib/pq/README.md
@@ -1,6 +1,6 @@
# pq - A pure Go postgres driver for Go's database/sql package
-[![Build Status](https://travis-ci.org/lib/pq.png?branch=master)](https://travis-ci.org/lib/pq)
+[![Build Status](https://travis-ci.org/lib/pq.svg?branch=master)](https://travis-ci.org/lib/pq)
## Install
diff --git a/vendor/github.com/lib/pq/conn.go b/vendor/github.com/lib/pq/conn.go
index 3c8f77cb6..4b2fb4462 100644
--- a/vendor/github.com/lib/pq/conn.go
+++ b/vendor/github.com/lib/pq/conn.go
@@ -133,7 +133,7 @@ type conn struct {
// Handle driver-side settings in parsed connection string.
func (c *conn) handleDriverSettings(o values) (err error) {
boolSetting := func(key string, val *bool) error {
- if value := o.Get(key); value != "" {
+ if value, ok := o[key]; ok {
if value == "yes" {
*val = true
} else if value == "no" {
@@ -158,8 +158,7 @@ func (c *conn) handleDriverSettings(o values) (err error) {
func (c *conn) handlePgpass(o values) {
// if a password was supplied, do not process .pgpass
- _, ok := o["password"]
- if ok {
+ if _, ok := o["password"]; ok {
return
}
filename := os.Getenv("PGPASSFILE")
@@ -187,11 +186,11 @@ func (c *conn) handlePgpass(o values) {
}
defer file.Close()
scanner := bufio.NewScanner(io.Reader(file))
- hostname := o.Get("host")
+ hostname := o["host"]
ntw, _ := network(o)
- port := o.Get("port")
- db := o.Get("dbname")
- username := o.Get("user")
+ port := o["port"]
+ db := o["dbname"]
+ username := o["user"]
// From: https://github.com/tg/pgpass/blob/master/reader.go
getFields := func(s string) []string {
fs := make([]string, 0, 5)
@@ -256,13 +255,13 @@ func DialOpen(d Dialer, name string) (_ driver.Conn, err error) {
// * Very low precedence defaults applied in every situation
// * Environment variables
// * Explicitly passed connection information
- o.Set("host", "localhost")
- o.Set("port", "5432")
+ o["host"] = "localhost"
+ o["port"] = "5432"
// N.B.: Extra float digits should be set to 3, but that breaks
// Postgres 8.4 and older, where the max is 2.
- o.Set("extra_float_digits", "2")
+ o["extra_float_digits"] = "2"
for k, v := range parseEnviron(os.Environ()) {
- o.Set(k, v)
+ o[k] = v
}
if strings.HasPrefix(name, "postgres://") || strings.HasPrefix(name, "postgresql://") {
@@ -277,9 +276,9 @@ func DialOpen(d Dialer, name string) (_ driver.Conn, err error) {
}
// Use the "fallback" application name if necessary
- if fallback := o.Get("fallback_application_name"); fallback != "" {
- if !o.Isset("application_name") {
- o.Set("application_name", fallback)
+ if fallback, ok := o["fallback_application_name"]; ok {
+ if _, ok := o["application_name"]; !ok {
+ o["application_name"] = fallback
}
}
@@ -290,29 +289,29 @@ func DialOpen(d Dialer, name string) (_ driver.Conn, err error) {
// parsing its value is not worth it. Instead, we always explicitly send
// client_encoding as a separate run-time parameter, which should override
// anything set in options.
- if enc := o.Get("client_encoding"); enc != "" && !isUTF8(enc) {
+ if enc, ok := o["client_encoding"]; ok && !isUTF8(enc) {
return nil, errors.New("client_encoding must be absent or 'UTF8'")
}
- o.Set("client_encoding", "UTF8")
+ o["client_encoding"] = "UTF8"
// DateStyle needs a similar treatment.
- if datestyle := o.Get("datestyle"); datestyle != "" {
+ if datestyle, ok := o["datestyle"]; ok {
if datestyle != "ISO, MDY" {
panic(fmt.Sprintf("setting datestyle must be absent or %v; got %v",
"ISO, MDY", datestyle))
}
} else {
- o.Set("datestyle", "ISO, MDY")
+ o["datestyle"] = "ISO, MDY"
}
// If a user is not provided by any other means, the last
// resort is to use the current operating system provided user
// name.
- if o.Get("user") == "" {
+ if _, ok := o["user"]; !ok {
u, err := userCurrent()
if err != nil {
return nil, err
} else {
- o.Set("user", u)
+ o["user"] = u
}
}
@@ -335,7 +334,7 @@ func DialOpen(d Dialer, name string) (_ driver.Conn, err error) {
cn.startup(o)
// reset the deadline, in case one was set (see dial)
- if timeout := o.Get("connect_timeout"); timeout != "" && timeout != "0" {
+ if timeout, ok := o["connect_timeout"]; ok && timeout != "0" {
err = cn.c.SetDeadline(time.Time{})
}
return cn, err
@@ -349,7 +348,7 @@ func dial(d Dialer, o values) (net.Conn, error) {
}
// Zero or not specified means wait indefinitely.
- if timeout := o.Get("connect_timeout"); timeout != "" && timeout != "0" {
+ if timeout, ok := o["connect_timeout"]; ok && timeout != "0" {
seconds, err := strconv.ParseInt(timeout, 10, 0)
if err != nil {
return nil, fmt.Errorf("invalid value for parameter connect_timeout: %s", err)
@@ -371,31 +370,18 @@ func dial(d Dialer, o values) (net.Conn, error) {
}
func network(o values) (string, string) {
- host := o.Get("host")
+ host := o["host"]
if strings.HasPrefix(host, "/") {
- sockPath := path.Join(host, ".s.PGSQL."+o.Get("port"))
+ sockPath := path.Join(host, ".s.PGSQL."+o["port"])
return "unix", sockPath
}
- return "tcp", net.JoinHostPort(host, o.Get("port"))
+ return "tcp", net.JoinHostPort(host, o["port"])
}
type values map[string]string
-func (vs values) Set(k, v string) {
- vs[k] = v
-}
-
-func (vs values) Get(k string) (v string) {
- return vs[k]
-}
-
-func (vs values) Isset(k string) bool {
- _, ok := vs[k]
- return ok
-}
-
// scanner implements a tokenizer for libpq-style option strings.
type scanner struct {
s []rune
@@ -466,7 +452,7 @@ func parseOpts(name string, o values) error {
// Skip any whitespace after the =
if r, ok = s.SkipSpaces(); !ok {
// If we reach the end here, the last value is just an empty string as per libpq.
- o.Set(string(keyRunes), "")
+ o[string(keyRunes)] = ""
break
}
@@ -501,7 +487,7 @@ func parseOpts(name string, o values) error {
}
}
- o.Set(string(keyRunes), string(valRunes))
+ o[string(keyRunes)] = string(valRunes)
}
return nil
@@ -665,6 +651,12 @@ func (cn *conn) simpleQuery(q string) (res *rows, err error) {
cn: cn,
}
}
+ // Set the result and tag to the last command complete if there wasn't a
+ // query already run. Although queries usually return from here and cede
+ // control to Next, a query with zero results does not.
+ if t == 'C' && res.colNames == nil {
+ res.result, res.tag = cn.parseComplete(r.string())
+ }
res.done = true
case 'Z':
cn.processReadyForQuery(r)
@@ -1119,7 +1111,7 @@ func (cn *conn) auth(r *readBuf, o values) {
// OK
case 3:
w := cn.writeBuf('p')
- w.string(o.Get("password"))
+ w.string(o["password"])
cn.send(w)
t, r := cn.recv()
@@ -1133,7 +1125,7 @@ func (cn *conn) auth(r *readBuf, o values) {
case 5:
s := string(r.next(4))
w := cn.writeBuf('p')
- w.string("md5" + md5s(md5s(o.Get("password")+o.Get("user"))+s))
+ w.string("md5" + md5s(md5s(o["password"]+o["user"])+s))
cn.send(w)
t, r := cn.recv()
@@ -1333,6 +1325,8 @@ type rows struct {
colFmts []format
done bool
rb readBuf
+ result driver.Result
+ tag string
}
func (rs *rows) Close() error {
@@ -1356,6 +1350,17 @@ func (rs *rows) Columns() []string {
return rs.colNames
}
+func (rs *rows) Result() driver.Result {
+ if rs.result == nil {
+ return emptyRows
+ }
+ return rs.result
+}
+
+func (rs *rows) Tag() string {
+ return rs.tag
+}
+
func (rs *rows) Next(dest []driver.Value) (err error) {
if rs.done {
return io.EOF
@@ -1373,6 +1378,9 @@ func (rs *rows) Next(dest []driver.Value) (err error) {
case 'E':
err = parseError(&rs.rb)
case 'C', 'I':
+ if t == 'C' {
+ rs.result, rs.tag = conn.parseComplete(rs.rb.string())
+ }
continue
case 'Z':
conn.processReadyForQuery(&rs.rb)
diff --git a/vendor/github.com/lib/pq/conn_go18.go b/vendor/github.com/lib/pq/conn_go18.go
index 0aca1d002..43cc35f7b 100644
--- a/vendor/github.com/lib/pq/conn_go18.go
+++ b/vendor/github.com/lib/pq/conn_go18.go
@@ -14,10 +14,7 @@ func (cn *conn) QueryContext(ctx context.Context, query string, args []driver.Na
for i, nv := range args {
list[i] = nv.Value
}
- var closed chan<- struct{}
- if ctx.Done() != nil {
- closed = watchCancel(ctx, cn.cancel)
- }
+ closed := cn.watchCancel(ctx)
r, err := cn.query(query, list)
if err != nil {
return nil, err
@@ -33,8 +30,7 @@ func (cn *conn) ExecContext(ctx context.Context, query string, args []driver.Nam
list[i] = nv.Value
}
- if ctx.Done() != nil {
- closed := watchCancel(ctx, cn.cancel)
+ if closed := cn.watchCancel(ctx); closed != nil {
defer close(closed)
}
@@ -53,22 +49,23 @@ func (cn *conn) BeginTx(ctx context.Context, opts driver.TxOptions) (driver.Tx,
if err != nil {
return nil, err
}
- if ctx.Done() != nil {
- cn.txnClosed = watchCancel(ctx, cn.cancel)
- }
+ cn.txnClosed = cn.watchCancel(ctx)
return tx, nil
}
-func watchCancel(ctx context.Context, cancel func()) chan<- struct{} {
- closed := make(chan struct{})
- go func() {
- select {
- case <-ctx.Done():
- cancel()
- case <-closed:
- }
- }()
- return closed
+func (cn *conn) watchCancel(ctx context.Context) chan<- struct{} {
+ if done := ctx.Done(); done != nil {
+ closed := make(chan struct{})
+ go func() {
+ select {
+ case <-done:
+ cn.cancel()
+ case <-closed:
+ }
+ }()
+ return closed
+ }
+ return nil
}
func (cn *conn) cancel() {
diff --git a/vendor/github.com/lib/pq/conn_test.go b/vendor/github.com/lib/pq/conn_test.go
index 183e6dcd6..c9135b727 100644
--- a/vendor/github.com/lib/pq/conn_test.go
+++ b/vendor/github.com/lib/pq/conn_test.go
@@ -191,7 +191,7 @@ localhost:*:*:*:pass_C
pgpass.Close()
assertPassword := func(extra values, expected string) {
- o := &values{
+ o := values{
"host": "localhost",
"sslmode": "disable",
"connect_timeout": "20",
@@ -203,11 +203,11 @@ localhost:*:*:*:pass_C
"datestyle": "ISO, MDY",
}
for k, v := range extra {
- (*o)[k] = v
+ o[k] = v
}
- (&conn{}).handlePgpass(*o)
- if o.Get("password") != expected {
- t.Fatalf("For %v expected %s got %s", extra, expected, o.Get("password"))
+ (&conn{}).handlePgpass(o)
+ if pw := o["password"]; pw != expected {
+ t.Fatalf("For %v expected %s got %s", extra, expected, pw)
}
}
// wrong permissions for the pgpass file means it should be ignored
@@ -686,17 +686,28 @@ func TestCloseBadConn(t *testing.T) {
if err := cn.Close(); err != nil {
t.Fatal(err)
}
+
+ // During the Go 1.9 cycle, https://github.com/golang/go/commit/3792db5
+ // changed this error from
+ //
+ // net.errClosing = errors.New("use of closed network connection")
+ //
+ // to
+ //
+ // internal/poll.ErrClosing = errors.New("use of closed file or network connection")
+ const errClosing = "use of closed"
+
// Verify write after closing fails.
if _, err := nc.Write(nil); err == nil {
t.Fatal("expected error")
- } else if !strings.Contains(err.Error(), "use of closed network connection") {
- t.Fatalf("expected use of closed network connection error, got %s", err)
+ } else if !strings.Contains(err.Error(), errClosing) {
+ t.Fatalf("expected %s error, got %s", errClosing, err)
}
// Verify second close fails.
if err := cn.Close(); err == nil {
t.Fatal("expected error")
- } else if !strings.Contains(err.Error(), "use of closed network connection") {
- t.Fatalf("expected use of closed network connection error, got %s", err)
+ } else if !strings.Contains(err.Error(), errClosing) {
+ t.Fatalf("expected %s error, got %s", errClosing, err)
}
}
@@ -1493,3 +1504,82 @@ func TestQuoteIdentifier(t *testing.T) {
}
}
}
+
+func TestRowsResultTag(t *testing.T) {
+ type ResultTag interface {
+ Result() driver.Result
+ Tag() string
+ }
+
+ tests := []struct {
+ query string
+ tag string
+ ra int64
+ }{
+ {
+ query: "CREATE TEMP TABLE temp (a int)",
+ tag: "CREATE TABLE",
+ },
+ {
+ query: "INSERT INTO temp VALUES (1), (2)",
+ tag: "INSERT",
+ ra: 2,
+ },
+ {
+ query: "SELECT 1",
+ },
+ // A SELECT anywhere should take precedent.
+ {
+ query: "SELECT 1; INSERT INTO temp VALUES (1), (2)",
+ },
+ {
+ query: "INSERT INTO temp VALUES (1), (2); SELECT 1",
+ },
+ // Multiple statements that don't return rows should return the last tag.
+ {
+ query: "CREATE TEMP TABLE t (a int); DROP TABLE t",
+ tag: "DROP TABLE",
+ },
+ // Ensure a rows-returning query in any position among various tags-returing
+ // statements will prefer the rows.
+ {
+ query: "SELECT 1; CREATE TEMP TABLE t (a int); DROP TABLE t",
+ },
+ {
+ query: "CREATE TEMP TABLE t (a int); SELECT 1; DROP TABLE t",
+ },
+ {
+ query: "CREATE TEMP TABLE t (a int); DROP TABLE t; SELECT 1",
+ },
+ // Verify that an no-results query doesn't set the tag.
+ {
+ query: "CREATE TEMP TABLE t (a int); SELECT 1 WHERE FALSE; DROP TABLE t;",
+ },
+ }
+
+ // If this is the only test run, this will correct the connection string.
+ openTestConn(t).Close()
+
+ conn, err := Open("")
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer conn.Close()
+ q := conn.(driver.Queryer)
+
+ for _, test := range tests {
+ if rows, err := q.Query(test.query, nil); err != nil {
+ t.Fatalf("%s: %s", test.query, err)
+ } else {
+ r := rows.(ResultTag)
+ if tag := r.Tag(); tag != test.tag {
+ t.Fatalf("%s: unexpected tag %q", test.query, tag)
+ }
+ res := r.Result()
+ if ra, _ := res.RowsAffected(); ra != test.ra {
+ t.Fatalf("%s: unexpected rows affected: %d", test.query, ra)
+ }
+ rows.Close()
+ }
+ }
+}
diff --git a/vendor/github.com/lib/pq/go18_test.go b/vendor/github.com/lib/pq/go18_test.go
index 15546d865..5d17e4d92 100644
--- a/vendor/github.com/lib/pq/go18_test.go
+++ b/vendor/github.com/lib/pq/go18_test.go
@@ -79,10 +79,7 @@ func TestContextCancelExec(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
// Delay execution for just a bit until db.ExecContext has begun.
- go func() {
- time.Sleep(time.Millisecond * 10)
- cancel()
- }()
+ defer time.AfterFunc(time.Millisecond*10, cancel).Stop()
// Not canceled until after the exec has started.
if _, err := db.ExecContext(ctx, "select pg_sleep(1)"); err == nil {
@@ -106,10 +103,7 @@ func TestContextCancelQuery(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
// Delay execution for just a bit until db.QueryContext has begun.
- go func() {
- time.Sleep(time.Millisecond * 10)
- cancel()
- }()
+ defer time.AfterFunc(time.Millisecond*10, cancel).Stop()
// Not canceled until after the exec has started.
if _, err := db.QueryContext(ctx, "select pg_sleep(1)"); err == nil {
@@ -137,10 +131,7 @@ func TestContextCancelBegin(t *testing.T) {
}
// Delay execution for just a bit until tx.Exec has begun.
- go func() {
- time.Sleep(time.Millisecond * 10)
- cancel()
- }()
+ defer time.AfterFunc(time.Millisecond*10, cancel).Stop()
// Not canceled until after the exec has started.
if _, err := tx.Exec("select pg_sleep(1)"); err == nil {
diff --git a/vendor/github.com/lib/pq/listen_example/doc.go b/vendor/github.com/lib/pq/listen_example/doc.go
index 5bc99f5c1..80f0a9b97 100644
--- a/vendor/github.com/lib/pq/listen_example/doc.go
+++ b/vendor/github.com/lib/pq/listen_example/doc.go
@@ -51,21 +51,15 @@ mechanism to avoid polling the database while waiting for more work to arrive.
}
func waitForNotification(l *pq.Listener) {
- for {
- select {
- case <-l.Notify:
- fmt.Println("received notification, new work available")
- return
- case <-time.After(90 * time.Second):
- go func() {
- l.Ping()
- }()
- // Check if there's more work available, just in case it takes
- // a while for the Listener to notice connection loss and
- // reconnect.
- fmt.Println("received no work for 90 seconds, checking for new work")
- return
- }
+ select {
+ case <-l.Notify:
+ fmt.Println("received notification, new work available")
+ case <-time.After(90 * time.Second):
+ go l.Ping()
+ // Check if there's more work available, just in case it takes
+ // a while for the Listener to notice connection loss and
+ // reconnect.
+ fmt.Println("received no work for 90 seconds, checking for new work")
}
}
diff --git a/vendor/github.com/lib/pq/notify_test.go b/vendor/github.com/lib/pq/notify_test.go
index fe8941a4e..82a77e1eb 100644
--- a/vendor/github.com/lib/pq/notify_test.go
+++ b/vendor/github.com/lib/pq/notify_test.go
@@ -7,7 +7,6 @@ import (
"os"
"runtime"
"sync"
- "sync/atomic"
"testing"
"time"
)
@@ -235,15 +234,10 @@ func TestConnExecDeadlock(t *testing.T) {
// calls Close on the net.Conn; equivalent to a network failure
l.Close()
- var done int32 = 0
- go func() {
- time.Sleep(10 * time.Second)
- if atomic.LoadInt32(&done) != 1 {
- panic("timed out")
- }
- }()
+ defer time.AfterFunc(10*time.Second, func() {
+ panic("timed out")
+ }).Stop()
wg.Wait()
- atomic.StoreInt32(&done, 1)
}
// Test for ListenerConn being closed while a slow query is executing
@@ -271,15 +265,11 @@ func TestListenerConnCloseWhileQueryIsExecuting(t *testing.T) {
if err != nil {
t.Fatal(err)
}
- var done int32 = 0
- go func() {
- time.Sleep(10 * time.Second)
- if atomic.LoadInt32(&done) != 1 {
- panic("timed out")
- }
- }()
+
+ defer time.AfterFunc(10*time.Second, func() {
+ panic("timed out")
+ }).Stop()
wg.Wait()
- atomic.StoreInt32(&done, 1)
}
func TestNotifyExtra(t *testing.T) {
diff --git a/vendor/github.com/lib/pq/oid/types.go b/vendor/github.com/lib/pq/oid/types.go
index 03df05a61..a3390c23a 100644
--- a/vendor/github.com/lib/pq/oid/types.go
+++ b/vendor/github.com/lib/pq/oid/types.go
@@ -18,6 +18,7 @@ const (
T_xid Oid = 28
T_cid Oid = 29
T_oidvector Oid = 30
+ T_pg_ddl_command Oid = 32
T_pg_type Oid = 71
T_pg_attribute Oid = 75
T_pg_proc Oid = 81
@@ -28,6 +29,7 @@ const (
T_pg_node_tree Oid = 194
T__json Oid = 199
T_smgr Oid = 210
+ T_index_am_handler Oid = 325
T_point Oid = 600
T_lseg Oid = 601
T_path Oid = 602
@@ -133,6 +135,9 @@ const (
T__uuid Oid = 2951
T_txid_snapshot Oid = 2970
T_fdw_handler Oid = 3115
+ T_pg_lsn Oid = 3220
+ T__pg_lsn Oid = 3221
+ T_tsm_handler Oid = 3310
T_anyenum Oid = 3500
T_tsvector Oid = 3614
T_tsquery Oid = 3615
@@ -144,6 +149,8 @@ const (
T__regconfig Oid = 3735
T_regdictionary Oid = 3769
T__regdictionary Oid = 3770
+ T_jsonb Oid = 3802
+ T__jsonb Oid = 3807
T_anyrange Oid = 3831
T_event_trigger Oid = 3838
T_int4range Oid = 3904
@@ -158,4 +165,9 @@ const (
T__daterange Oid = 3913
T_int8range Oid = 3926
T__int8range Oid = 3927
+ T_pg_shseclabel Oid = 4066
+ T_regnamespace Oid = 4089
+ T__regnamespace Oid = 4090
+ T_regrole Oid = 4096
+ T__regrole Oid = 4097
)
diff --git a/vendor/github.com/lib/pq/ssl.go b/vendor/github.com/lib/pq/ssl.go
index b282ebd92..7deb30436 100644
--- a/vendor/github.com/lib/pq/ssl.go
+++ b/vendor/github.com/lib/pq/ssl.go
@@ -15,7 +15,7 @@ import (
func ssl(o values) func(net.Conn) net.Conn {
verifyCaOnly := false
tlsConf := tls.Config{}
- switch mode := o.Get("sslmode"); mode {
+ switch mode := o["sslmode"]; mode {
// "require" is the default.
case "", "require":
// We must skip TLS's own verification since it requires full
@@ -23,15 +23,19 @@ func ssl(o values) func(net.Conn) net.Conn {
tlsConf.InsecureSkipVerify = true
// From http://www.postgresql.org/docs/current/static/libpq-ssl.html:
- // Note: For backwards compatibility with earlier versions of PostgreSQL, if a
- // root CA file exists, the behavior of sslmode=require will be the same as
- // that of verify-ca, meaning the server certificate is validated against the
- // CA. Relying on this behavior is discouraged, and applications that need
- // certificate validation should always use verify-ca or verify-full.
- if _, err := os.Stat(o.Get("sslrootcert")); err == nil {
- verifyCaOnly = true
- } else {
- o.Set("sslrootcert", "")
+ //
+ // Note: For backwards compatibility with earlier versions of
+ // PostgreSQL, if a root CA file exists, the behavior of
+ // sslmode=require will be the same as that of verify-ca, meaning the
+ // server certificate is validated against the CA. Relying on this
+ // behavior is discouraged, and applications that need certificate
+ // validation should always use verify-ca or verify-full.
+ if sslrootcert, ok := o["sslrootcert"]; ok {
+ if _, err := os.Stat(sslrootcert); err == nil {
+ verifyCaOnly = true
+ } else {
+ delete(o, "sslrootcert")
+ }
}
case "verify-ca":
// We must skip TLS's own verification since it requires full
@@ -39,7 +43,7 @@ func ssl(o values) func(net.Conn) net.Conn {
tlsConf.InsecureSkipVerify = true
verifyCaOnly = true
case "verify-full":
- tlsConf.ServerName = o.Get("host")
+ tlsConf.ServerName = o["host"]
case "disable":
return nil
default:
@@ -64,38 +68,43 @@ func ssl(o values) func(net.Conn) net.Conn {
// in the user's home directory. The configured files must exist and have
// the correct permissions.
func sslClientCertificates(tlsConf *tls.Config, o values) {
- sslkey := o.Get("sslkey")
- sslcert := o.Get("sslcert")
-
- var cinfo, kinfo os.FileInfo
- var err error
+ // user.Current() might fail when cross-compiling. We have to ignore the
+ // error and continue without home directory defaults, since we wouldn't
+ // know from where to load them.
+ user, _ := user.Current()
+
+ // In libpq, the client certificate is only loaded if the setting is not blank.
+ //
+ // https://github.com/postgres/postgres/blob/REL9_6_2/src/interfaces/libpq/fe-secure-openssl.c#L1036-L1037
+ sslcert := o["sslcert"]
+ if len(sslcert) == 0 && user != nil {
+ sslcert = filepath.Join(user.HomeDir, ".postgresql", "postgresql.crt")
+ }
+ // https://github.com/postgres/postgres/blob/REL9_6_2/src/interfaces/libpq/fe-secure-openssl.c#L1045
+ if len(sslcert) == 0 {
+ return
+ }
+ // https://github.com/postgres/postgres/blob/REL9_6_2/src/interfaces/libpq/fe-secure-openssl.c#L1050:L1054
+ if _, err := os.Stat(sslcert); os.IsNotExist(err) {
+ return
+ } else if err != nil {
+ panic(err)
+ }
- if sslcert != "" && sslkey != "" {
- // Check that both files exist. Note that we don't do any more extensive
- // checks than this (such as checking that the paths aren't directories);
- // LoadX509KeyPair() will take care of the rest.
- cinfo, err = os.Stat(sslcert)
- if err != nil {
- panic(err)
- }
+ // In libpq, the ssl key is only loaded if the setting is not blank.
+ //
+ // https://github.com/postgres/postgres/blob/REL9_6_2/src/interfaces/libpq/fe-secure-openssl.c#L1123-L1222
+ sslkey := o["sslkey"]
+ if len(sslkey) == 0 && user != nil {
+ sslkey = filepath.Join(user.HomeDir, ".postgresql", "postgresql.key")
+ }
- kinfo, err = os.Stat(sslkey)
- if err != nil {
+ if len(sslkey) > 0 {
+ if err := sslKeyPermissions(sslkey); err != nil {
panic(err)
}
- } else {
- // Automatically find certificates from ~/.postgresql
- sslcert, sslkey, cinfo, kinfo = sslHomeCertificates()
-
- if cinfo == nil || kinfo == nil {
- // No certificates to load
- return
- }
}
- // The files must also have the correct permissions
- sslCertificatePermissions(cinfo, kinfo)
-
cert, err := tls.LoadX509KeyPair(sslcert, sslkey)
if err != nil {
panic(err)
@@ -105,7 +114,10 @@ func sslClientCertificates(tlsConf *tls.Config, o values) {
// sslCertificateAuthority adds the RootCA specified in the "sslrootcert" setting.
func sslCertificateAuthority(tlsConf *tls.Config, o values) {
- if sslrootcert := o.Get("sslrootcert"); sslrootcert != "" {
+ // In libpq, the root certificate is only loaded if the setting is not blank.
+ //
+ // https://github.com/postgres/postgres/blob/REL9_6_2/src/interfaces/libpq/fe-secure-openssl.c#L950-L951
+ if sslrootcert := o["sslrootcert"]; len(sslrootcert) > 0 {
tlsConf.RootCAs = x509.NewCertPool()
cert, err := ioutil.ReadFile(sslrootcert)
@@ -113,41 +125,12 @@ func sslCertificateAuthority(tlsConf *tls.Config, o values) {
panic(err)
}
- ok := tlsConf.RootCAs.AppendCertsFromPEM(cert)
- if !ok {
+ if !tlsConf.RootCAs.AppendCertsFromPEM(cert) {
errorf("couldn't parse pem in sslrootcert")
}
}
}
-// sslHomeCertificates returns the path and stats of certificates in the current
-// user's home directory.
-func sslHomeCertificates() (cert, key string, cinfo, kinfo os.FileInfo) {
- user, err := user.Current()
-
- if err != nil {
- // user.Current() might fail when cross-compiling. We have to ignore the
- // error and continue without client certificates, since we wouldn't know
- // from where to load them.
- return
- }
-
- cert = filepath.Join(user.HomeDir, ".postgresql", "postgresql.crt")
- key = filepath.Join(user.HomeDir, ".postgresql", "postgresql.key")
-
- cinfo, err = os.Stat(cert)
- if err != nil {
- cinfo = nil
- }
-
- kinfo, err = os.Stat(key)
- if err != nil {
- kinfo = nil
- }
-
- return
-}
-
// sslVerifyCertificateAuthority carries out a TLS handshake to the server and
// verifies the presented certificate against the CA, i.e. the one specified in
// sslrootcert or the system CA if sslrootcert was not specified.
diff --git a/vendor/github.com/lib/pq/ssl_permissions.go b/vendor/github.com/lib/pq/ssl_permissions.go
index 33076a8da..3b7c3a2a3 100644
--- a/vendor/github.com/lib/pq/ssl_permissions.go
+++ b/vendor/github.com/lib/pq/ssl_permissions.go
@@ -4,13 +4,17 @@ package pq
import "os"
-// sslCertificatePermissions checks the permissions on user-supplied certificate
-// files. The key file should have very little access.
+// sslKeyPermissions checks the permissions on user-supplied ssl key files.
+// The key file should have very little access.
//
// libpq does not check key file permissions on Windows.
-func sslCertificatePermissions(cert, key os.FileInfo) {
- kmode := key.Mode()
- if kmode != kmode&0600 {
- panic(ErrSSLKeyHasWorldPermissions)
+func sslKeyPermissions(sslkey string) error {
+ info, err := os.Stat(sslkey)
+ if err != nil {
+ return err
}
+ if info.Mode().Perm()&0077 != 0 {
+ return ErrSSLKeyHasWorldPermissions
+ }
+ return nil
}
diff --git a/vendor/github.com/lib/pq/ssl_test.go b/vendor/github.com/lib/pq/ssl_test.go
index f70a5fd57..3eafbfd20 100644
--- a/vendor/github.com/lib/pq/ssl_test.go
+++ b/vendor/github.com/lib/pq/ssl_test.go
@@ -6,7 +6,6 @@ import (
_ "crypto/sha256"
"crypto/x509"
"database/sql"
- "fmt"
"os"
"path/filepath"
"testing"
@@ -42,10 +41,13 @@ func openSSLConn(t *testing.T, conninfo string) (*sql.DB, error) {
}
func checkSSLSetup(t *testing.T, conninfo string) {
- db, err := openSSLConn(t, conninfo)
- if err == nil {
- db.Close()
- t.Fatalf("expected error with conninfo=%q", conninfo)
+ _, err := openSSLConn(t, conninfo)
+ if pge, ok := err.(*Error); ok {
+ if pge.Code.Name() != "invalid_authorization_specification" {
+ t.Fatalf("unexpected error code '%s'", pge.Code.Name())
+ }
+ } else {
+ t.Fatalf("expected %T, got %v", (*Error)(nil), err)
}
}
@@ -150,120 +152,128 @@ func TestSSLVerifyCA(t *testing.T) {
checkSSLSetup(t, "sslmode=disable user=pqgossltest")
// Not OK according to the system CA
- _, err := openSSLConn(t, "host=postgres sslmode=verify-ca user=pqgossltest")
- if err == nil {
- t.Fatal("expected error")
+ {
+ _, err := openSSLConn(t, "host=postgres sslmode=verify-ca user=pqgossltest")
+ if _, ok := err.(x509.UnknownAuthorityError); !ok {
+ t.Fatalf("expected %T, got %#+v", x509.UnknownAuthorityError{}, err)
+ }
}
- _, ok := err.(x509.UnknownAuthorityError)
- if !ok {
- t.Fatalf("expected x509.UnknownAuthorityError, got %#+v", err)
+
+ // Still not OK according to the system CA; empty sslrootcert is treated as unspecified.
+ {
+ _, err := openSSLConn(t, "host=postgres sslmode=verify-ca user=pqgossltest sslrootcert=''")
+ if _, ok := err.(x509.UnknownAuthorityError); !ok {
+ t.Fatalf("expected %T, got %#+v", x509.UnknownAuthorityError{}, err)
+ }
}
rootCertPath := filepath.Join(os.Getenv("PQSSLCERTTEST_PATH"), "root.crt")
rootCert := "sslrootcert=" + rootCertPath + " "
// No match on Common Name, but that's OK
- _, err = openSSLConn(t, rootCert+"host=127.0.0.1 sslmode=verify-ca user=pqgossltest")
- if err != nil {
+ if _, err := openSSLConn(t, rootCert+"host=127.0.0.1 sslmode=verify-ca user=pqgossltest"); err != nil {
t.Fatal(err)
}
// Everything OK
- _, err = openSSLConn(t, rootCert+"host=postgres sslmode=verify-ca user=pqgossltest")
- if err != nil {
+ if _, err := openSSLConn(t, rootCert+"host=postgres sslmode=verify-ca user=pqgossltest"); err != nil {
t.Fatal(err)
}
}
-func getCertConninfo(t *testing.T, source string) string {
- var sslkey string
- var sslcert string
-
- certpath := os.Getenv("PQSSLCERTTEST_PATH")
-
- switch source {
- case "missingkey":
- sslkey = "/tmp/filedoesnotexist"
- sslcert = filepath.Join(certpath, "postgresql.crt")
- case "missingcert":
- sslkey = filepath.Join(certpath, "postgresql.key")
- sslcert = "/tmp/filedoesnotexist"
- case "certtwice":
- sslkey = filepath.Join(certpath, "postgresql.crt")
- sslcert = filepath.Join(certpath, "postgresql.crt")
- case "valid":
- sslkey = filepath.Join(certpath, "postgresql.key")
- sslcert = filepath.Join(certpath, "postgresql.crt")
- default:
- t.Fatalf("invalid source %q", source)
- }
- return fmt.Sprintf("sslmode=require user=pqgosslcert sslkey=%s sslcert=%s", sslkey, sslcert)
-}
-
// Authenticate over SSL using client certificates
func TestSSLClientCertificates(t *testing.T) {
maybeSkipSSLTests(t)
// Environment sanity check: should fail without SSL
checkSSLSetup(t, "sslmode=disable user=pqgossltest")
- // Should also fail without a valid certificate
- db, err := openSSLConn(t, "sslmode=require user=pqgosslcert")
- if err == nil {
- db.Close()
- t.Fatal("expected error")
- }
- pge, ok := err.(*Error)
- if !ok {
- t.Fatal("expected pq.Error")
+ const baseinfo = "sslmode=require user=pqgosslcert"
+
+ // Certificate not specified, should fail
+ {
+ _, err := openSSLConn(t, baseinfo)
+ if pge, ok := err.(*Error); ok {
+ if pge.Code.Name() != "invalid_authorization_specification" {
+ t.Fatalf("unexpected error code '%s'", pge.Code.Name())
+ }
+ } else {
+ t.Fatalf("expected %T, got %v", (*Error)(nil), err)
+ }
}
- if pge.Code.Name() != "invalid_authorization_specification" {
- t.Fatalf("unexpected error code %q", pge.Code.Name())
+
+ // Empty certificate specified, should fail
+ {
+ _, err := openSSLConn(t, baseinfo+" sslcert=''")
+ if pge, ok := err.(*Error); ok {
+ if pge.Code.Name() != "invalid_authorization_specification" {
+ t.Fatalf("unexpected error code '%s'", pge.Code.Name())
+ }
+ } else {
+ t.Fatalf("expected %T, got %v", (*Error)(nil), err)
+ }
}
- // Should work
- db, err = openSSLConn(t, getCertConninfo(t, "valid"))
- if err != nil {
- t.Fatal(err)
+ // Non-existent certificate specified, should fail
+ {
+ _, err := openSSLConn(t, baseinfo+" sslcert=/tmp/filedoesnotexist")
+ if pge, ok := err.(*Error); ok {
+ if pge.Code.Name() != "invalid_authorization_specification" {
+ t.Fatalf("unexpected error code '%s'", pge.Code.Name())
+ }
+ } else {
+ t.Fatalf("expected %T, got %v", (*Error)(nil), err)
+ }
}
- rows, err := db.Query("SELECT 1")
- if err != nil {
- t.Fatal(err)
+
+ certpath, ok := os.LookupEnv("PQSSLCERTTEST_PATH")
+ if !ok {
+ t.Fatalf("PQSSLCERTTEST_PATH not present in environment")
}
- rows.Close()
-}
-// Test errors with ssl certificates
-func TestSSLClientCertificatesMissingFiles(t *testing.T) {
- maybeSkipSSLTests(t)
- // Environment sanity check: should fail without SSL
- checkSSLSetup(t, "sslmode=disable user=pqgossltest")
+ sslcert := filepath.Join(certpath, "postgresql.crt")
- // Key missing, should fail
- _, err := openSSLConn(t, getCertConninfo(t, "missingkey"))
- if err == nil {
- t.Fatal("expected error")
- }
- // should be a PathError
- _, ok := err.(*os.PathError)
- if !ok {
- t.Fatalf("expected PathError, got %#+v", err)
+ // Cert present, key not specified, should fail
+ {
+ _, err := openSSLConn(t, baseinfo+" sslcert="+sslcert)
+ if _, ok := err.(*os.PathError); !ok {
+ t.Fatalf("expected %T, got %#+v", (*os.PathError)(nil), err)
+ }
}
- // Cert missing, should fail
- _, err = openSSLConn(t, getCertConninfo(t, "missingcert"))
- if err == nil {
- t.Fatal("expected error")
+ // Cert present, empty key specified, should fail
+ {
+ _, err := openSSLConn(t, baseinfo+" sslcert="+sslcert+" sslkey=''")
+ if _, ok := err.(*os.PathError); !ok {
+ t.Fatalf("expected %T, got %#+v", (*os.PathError)(nil), err)
+ }
}
- // should be a PathError
- _, ok = err.(*os.PathError)
- if !ok {
- t.Fatalf("expected PathError, got %#+v", err)
+
+ // Cert present, non-existent key, should fail
+ {
+ _, err := openSSLConn(t, baseinfo+" sslcert="+sslcert+" sslkey=/tmp/filedoesnotexist")
+ if _, ok := err.(*os.PathError); !ok {
+ t.Fatalf("expected %T, got %#+v", (*os.PathError)(nil), err)
+ }
}
- // Key has wrong permissions, should fail
- _, err = openSSLConn(t, getCertConninfo(t, "certtwice"))
- if err == nil {
- t.Fatal("expected error")
+ // Key has wrong permissions (passing the cert as the key), should fail
+ if _, err := openSSLConn(t, baseinfo+" sslcert="+sslcert+" sslkey="+sslcert); err != ErrSSLKeyHasWorldPermissions {
+ t.Fatalf("expected %s, got %#+v", ErrSSLKeyHasWorldPermissions, err)
}
- if err != ErrSSLKeyHasWorldPermissions {
- t.Fatalf("expected ErrSSLKeyHasWorldPermissions, got %#+v", err)
+
+ sslkey := filepath.Join(certpath, "postgresql.key")
+
+ // Should work
+ if db, err := openSSLConn(t, baseinfo+" sslcert="+sslcert+" sslkey="+sslkey); err != nil {
+ t.Fatal(err)
+ } else {
+ rows, err := db.Query("SELECT 1")
+ if err != nil {
+ t.Fatal(err)
+ }
+ if err := rows.Close(); err != nil {
+ t.Fatal(err)
+ }
+ if err := db.Close(); err != nil {
+ t.Fatal(err)
+ }
}
}
diff --git a/vendor/github.com/lib/pq/ssl_windows.go b/vendor/github.com/lib/pq/ssl_windows.go
index 529daed22..5d2c763ce 100644
--- a/vendor/github.com/lib/pq/ssl_windows.go
+++ b/vendor/github.com/lib/pq/ssl_windows.go
@@ -2,8 +2,8 @@
package pq
-import "os"
-
-// sslCertificatePermissions checks the permissions on user-supplied certificate
-// files. In libpq, this is a no-op on Windows.
-func sslCertificatePermissions(cert, key os.FileInfo) {}
+// sslKeyPermissions checks the permissions on user-supplied ssl key files.
+// The key file should have very little access.
+//
+// libpq does not check key file permissions on Windows.
+func sslKeyPermissions(string) error { return nil }
diff --git a/vendor/github.com/miekg/dns/README.md b/vendor/github.com/miekg/dns/README.md
index 0c1f1b6a9..2acc7f1ff 100644
--- a/vendor/github.com/miekg/dns/README.md
+++ b/vendor/github.com/miekg/dns/README.md
@@ -25,6 +25,7 @@ two versions of Go, currently: 1.6 and 1.7.
A not-so-up-to-date-list-that-may-be-actually-current:
+* https://github.com/coredns/coredns
* https://cloudflare.com
* https://github.com/abh/geodns
* http://www.statdns.com/
@@ -54,6 +55,8 @@ A not-so-up-to-date-list-that-may-be-actually-current:
* https://github.com/mehrdadrad/mylg
* https://github.com/bamarni/dockness
* https://github.com/fffaraz/microdns
+* http://quilt.io
+* https://github.com/ipdcode/hades (JD.COM)
Send pull request if you want to be listed here.
@@ -142,6 +145,7 @@ Example programs can be found in the `github.com/miekg/exdns` repository.
* 6975 - Algorithm Understanding in DNSSEC
* 7043 - EUI48/EUI64 records
* 7314 - DNS (EDNS) EXPIRE Option
+* 7828 - edns-tcp-keepalive EDNS0 Option
* 7553 - URI record
* 7858 - DNS over TLS: Initiation and Performance Considerations (draft)
* 7873 - Domain Name System (DNS) Cookies (draft-ietf-dnsop-cookies)
diff --git a/vendor/github.com/miekg/dns/client.go b/vendor/github.com/miekg/dns/client.go
index 0db7f7bf6..d54d6422e 100644
--- a/vendor/github.com/miekg/dns/client.go
+++ b/vendor/github.com/miekg/dns/client.go
@@ -121,12 +121,12 @@ func (c *Client) Exchange(m *Msg, a string) (r *Msg, rtt time.Duration, err erro
r, rtt, err, shared := c.group.Do(m.Question[0].Name+t+cl, func() (*Msg, time.Duration, error) {
return c.exchange(m, a)
})
+ if r != nil && shared {
+ r = r.Copy()
+ }
if err != nil {
return r, rtt, err
}
- if shared {
- return r.Copy(), rtt, nil
- }
return r, rtt, nil
}
@@ -300,6 +300,18 @@ func tcpMsgLen(t io.Reader) (int, error) {
if err != nil {
return 0, err
}
+
+ // As seen with my local router/switch, retursn 1 byte on the above read,
+ // resulting a a ShortRead. Just write it out (instead of loop) and read the
+ // other byte.
+ if n == 1 {
+ n1, err := t.Read(p[1:])
+ if err != nil {
+ return 0, err
+ }
+ n += n1
+ }
+
if n != 2 {
return 0, ErrShortRead
}
@@ -400,7 +412,7 @@ func (co *Conn) Write(p []byte) (n int, err error) {
n, err := io.Copy(w, bytes.NewReader(p))
return int(n), err
}
- n, err = co.Conn.(*net.UDPConn).Write(p)
+ n, err = co.Conn.Write(p)
return n, err
}
diff --git a/vendor/github.com/miekg/dns/client_test.go b/vendor/github.com/miekg/dns/client_test.go
index 850bcfcda..dee585f36 100644
--- a/vendor/github.com/miekg/dns/client_test.go
+++ b/vendor/github.com/miekg/dns/client_test.go
@@ -5,6 +5,7 @@ import (
"fmt"
"net"
"strconv"
+ "sync"
"testing"
"time"
)
@@ -77,8 +78,8 @@ func TestClientTLSSync(t *testing.T) {
}
}
-func TestClientSyncBadId(t *testing.T) {
- HandleFunc("miek.nl.", HelloServerBadId)
+func TestClientSyncBadID(t *testing.T) {
+ HandleFunc("miek.nl.", HelloServerBadID)
defer HandleRemove("miek.nl.")
s, addrstr, err := RunLocalUDPServer("127.0.0.1:0")
@@ -450,3 +451,61 @@ func TestTimeout(t *testing.T) {
t.Errorf("exchange took longer (%v) than specified Timeout (%v)", length, timeout)
}
}
+
+// Check that responses from deduplicated requests aren't shared between callers
+func TestConcurrentExchanges(t *testing.T) {
+ cases := make([]*Msg, 2)
+ cases[0] = new(Msg)
+ cases[1] = new(Msg)
+ cases[1].Truncated = true
+ for _, m := range cases {
+ block := make(chan struct{})
+ waiting := make(chan struct{})
+
+ handler := func(w ResponseWriter, req *Msg) {
+ r := m.Copy()
+ r.SetReply(req)
+
+ waiting <- struct{}{}
+ <-block
+ w.WriteMsg(r)
+ }
+
+ HandleFunc("miek.nl.", handler)
+ defer HandleRemove("miek.nl.")
+
+ s, addrstr, err := RunLocalUDPServer("127.0.0.1:0")
+ if err != nil {
+ t.Fatalf("unable to run test server: %s", err)
+ }
+ defer s.Shutdown()
+
+ m := new(Msg)
+ m.SetQuestion("miek.nl.", TypeSRV)
+ c := &Client{
+ SingleInflight: true,
+ }
+ r := make([]*Msg, 2)
+
+ var wg sync.WaitGroup
+ wg.Add(len(r))
+ for i := 0; i < len(r); i++ {
+ go func(i int) {
+ r[i], _, _ = c.Exchange(m.Copy(), addrstr)
+ wg.Done()
+ }(i)
+ }
+ select {
+ case <-waiting:
+ case <-time.After(time.Second):
+ t.FailNow()
+ }
+ close(block)
+ wg.Wait()
+
+ if r[0] == r[1] {
+ t.Log("Got same response object, expected non-shared responses")
+ t.Fail()
+ }
+ }
+}
diff --git a/vendor/github.com/miekg/dns/clientconfig.go b/vendor/github.com/miekg/dns/clientconfig.go
index cfa9ad0b2..0a1f5a92c 100644
--- a/vendor/github.com/miekg/dns/clientconfig.go
+++ b/vendor/github.com/miekg/dns/clientconfig.go
@@ -97,3 +97,35 @@ func ClientConfigFromFile(resolvconf string) (*ClientConfig, error) {
}
return c, nil
}
+
+// NameList returns all of the names that should be queried based on the
+// config. It is based off of go's net/dns name building, but it does not
+// check the length of the resulting names.
+func (c *ClientConfig) NameList(name string) []string {
+ // if this domain is already fully qualified, no append needed.
+ if IsFqdn(name) {
+ return []string{name}
+ }
+
+ // Check to see if the name has more labels than Ndots. Do this before making
+ // the domain fully qualified.
+ hasNdots := CountLabel(name) > c.Ndots
+ // Make the domain fully qualified.
+ name = Fqdn(name)
+
+ // Make a list of names based off search.
+ names := []string{}
+
+ // If name has enough dots, try that first.
+ if hasNdots {
+ names = append(names, name)
+ }
+ for _, s := range c.Search {
+ names = append(names, Fqdn(name+s))
+ }
+ // If we didn't have enough dots, try after suffixes.
+ if !hasNdots {
+ names = append(names, name)
+ }
+ return names
+}
diff --git a/vendor/github.com/miekg/dns/clientconfig_test.go b/vendor/github.com/miekg/dns/clientconfig_test.go
index 63bc5c814..7755a8a6f 100644
--- a/vendor/github.com/miekg/dns/clientconfig_test.go
+++ b/vendor/github.com/miekg/dns/clientconfig_test.go
@@ -48,3 +48,40 @@ func testConfig(t *testing.T, data string) {
func TestNameserver(t *testing.T) { testConfig(t, normal) }
func TestMissingFinalNewLine(t *testing.T) { testConfig(t, missingNewline) }
+
+func TestNameList(t *testing.T) {
+ cfg := ClientConfig{
+ Ndots: 1,
+ }
+ // fqdn should be only result returned
+ names := cfg.NameList("miek.nl.")
+ if len(names) != 1 {
+ t.Errorf("NameList returned != 1 names: %v", names)
+ } else if names[0] != "miek.nl." {
+ t.Errorf("NameList didn't return sent fqdn domain: %v", names[0])
+ }
+
+ cfg.Search = []string{
+ "test",
+ }
+ // Sent domain has NDots and search
+ names = cfg.NameList("miek.nl")
+ if len(names) != 2 {
+ t.Errorf("NameList returned != 2 names: %v", names)
+ } else if names[0] != "miek.nl." {
+ t.Errorf("NameList didn't return sent domain first: %v", names[0])
+ } else if names[1] != "miek.nl.test." {
+ t.Errorf("NameList didn't return search last: %v", names[1])
+ }
+
+ cfg.Ndots = 2
+ // Sent domain has less than NDots and search
+ names = cfg.NameList("miek.nl")
+ if len(names) != 2 {
+ t.Errorf("NameList returned != 2 names: %v", names)
+ } else if names[0] != "miek.nl.test." {
+ t.Errorf("NameList didn't return search first: %v", names[0])
+ } else if names[1] != "miek.nl." {
+ t.Errorf("NameList didn't return sent domain last: %v", names[1])
+ }
+}
diff --git a/vendor/github.com/miekg/dns/compress_generate.go b/vendor/github.com/miekg/dns/compress_generate.go
new file mode 100644
index 000000000..1a301e9f3
--- /dev/null
+++ b/vendor/github.com/miekg/dns/compress_generate.go
@@ -0,0 +1,184 @@
+//+build ignore
+
+// compression_generate.go is meant to run with go generate. It will use
+// go/{importer,types} to track down all the RR struct types. Then for each type
+// it will look to see if there are (compressible) names, if so it will add that
+// type to compressionLenHelperType and comressionLenSearchType which "fake" the
+// compression so that Len() is fast.
+package main
+
+import (
+ "bytes"
+ "fmt"
+ "go/format"
+ "go/importer"
+ "go/types"
+ "log"
+ "os"
+)
+
+var packageHdr = `
+// *** DO NOT MODIFY ***
+// AUTOGENERATED BY go generate from compress_generate.go
+
+package dns
+
+`
+
+// getTypeStruct will take a type and the package scope, and return the
+// (innermost) struct if the type is considered a RR type (currently defined as
+// those structs beginning with a RR_Header, could be redefined as implementing
+// the RR interface). The bool return value indicates if embedded structs were
+// resolved.
+func getTypeStruct(t types.Type, scope *types.Scope) (*types.Struct, bool) {
+ st, ok := t.Underlying().(*types.Struct)
+ if !ok {
+ return nil, false
+ }
+ if st.Field(0).Type() == scope.Lookup("RR_Header").Type() {
+ return st, false
+ }
+ if st.Field(0).Anonymous() {
+ st, _ := getTypeStruct(st.Field(0).Type(), scope)
+ return st, true
+ }
+ return nil, false
+}
+
+func main() {
+ // Import and type-check the package
+ pkg, err := importer.Default().Import("github.com/miekg/dns")
+ fatalIfErr(err)
+ scope := pkg.Scope()
+
+ domainTypes := map[string]bool{} // Types that have a domain name in them (either comressible or not).
+ cdomainTypes := map[string]bool{} // Types that have a compressible domain name in them (subset of domainType)
+ for _, name := range scope.Names() {
+ o := scope.Lookup(name)
+ if o == nil || !o.Exported() {
+ continue
+ }
+ st, _ := getTypeStruct(o.Type(), scope)
+ if st == nil {
+ continue
+ }
+ if name == "PrivateRR" {
+ continue
+ }
+
+ if scope.Lookup("Type"+o.Name()) == nil && o.Name() != "RFC3597" {
+ log.Fatalf("Constant Type%s does not exist.", o.Name())
+ }
+
+ for i := 1; i < st.NumFields(); i++ {
+ if _, ok := st.Field(i).Type().(*types.Slice); ok {
+ if st.Tag(i) == `dns:"domain-name"` {
+ domainTypes[o.Name()] = true
+ }
+ if st.Tag(i) == `dns:"cdomain-name"` {
+ cdomainTypes[o.Name()] = true
+ domainTypes[o.Name()] = true
+ }
+ continue
+ }
+
+ switch {
+ case st.Tag(i) == `dns:"domain-name"`:
+ domainTypes[o.Name()] = true
+ case st.Tag(i) == `dns:"cdomain-name"`:
+ cdomainTypes[o.Name()] = true
+ domainTypes[o.Name()] = true
+ }
+ }
+ }
+
+ b := &bytes.Buffer{}
+ b.WriteString(packageHdr)
+
+ // compressionLenHelperType - all types that have domain-name/cdomain-name can be used for compressing names
+
+ fmt.Fprint(b, "func compressionLenHelperType(c map[string]int, r RR) {\n")
+ fmt.Fprint(b, "switch x := r.(type) {\n")
+ for name, _ := range domainTypes {
+ o := scope.Lookup(name)
+ st, _ := getTypeStruct(o.Type(), scope)
+
+ fmt.Fprintf(b, "case *%s:\n", name)
+ for i := 1; i < st.NumFields(); i++ {
+ out := func(s string) { fmt.Fprintf(b, "compressionLenHelper(c, x.%s)\n", st.Field(i).Name()) }
+
+ if _, ok := st.Field(i).Type().(*types.Slice); ok {
+ switch st.Tag(i) {
+ case `dns:"domain-name"`:
+ fallthrough
+ case `dns:"cdomain-name"`:
+ // For HIP we need to slice over the elements in this slice.
+ fmt.Fprintf(b, `for i := range x.%s {
+ compressionLenHelper(c, x.%s[i])
+ }
+`, st.Field(i).Name(), st.Field(i).Name())
+ }
+ continue
+ }
+
+ switch {
+ case st.Tag(i) == `dns:"cdomain-name"`:
+ fallthrough
+ case st.Tag(i) == `dns:"domain-name"`:
+ out(st.Field(i).Name())
+ }
+ }
+ }
+ fmt.Fprintln(b, "}\n}\n\n")
+
+ // compressionLenSearchType - search cdomain-tags types for compressible names.
+
+ fmt.Fprint(b, "func compressionLenSearchType(c map[string]int, r RR) (int, bool) {\n")
+ fmt.Fprint(b, "switch x := r.(type) {\n")
+ for name, _ := range cdomainTypes {
+ o := scope.Lookup(name)
+ st, _ := getTypeStruct(o.Type(), scope)
+
+ fmt.Fprintf(b, "case *%s:\n", name)
+ j := 1
+ for i := 1; i < st.NumFields(); i++ {
+ out := func(s string, j int) {
+ fmt.Fprintf(b, "k%d, ok%d := compressionLenSearch(c, x.%s)\n", j, j, st.Field(i).Name())
+ }
+
+ // There are no slice types with names that can be compressed.
+
+ switch {
+ case st.Tag(i) == `dns:"cdomain-name"`:
+ out(st.Field(i).Name(), j)
+ j++
+ }
+ }
+ k := "k1"
+ ok := "ok1"
+ for i := 2; i < j; i++ {
+ k += fmt.Sprintf(" + k%d", i)
+ ok += fmt.Sprintf(" && ok%d", i)
+ }
+ fmt.Fprintf(b, "return %s, %s\n", k, ok)
+ }
+ fmt.Fprintln(b, "}\nreturn 0, false\n}\n\n")
+
+ // gofmt
+ res, err := format.Source(b.Bytes())
+ if err != nil {
+ b.WriteTo(os.Stderr)
+ log.Fatal(err)
+ }
+
+ f, err := os.Create("zcompress.go")
+ fatalIfErr(err)
+ defer f.Close()
+ f.Write(res)
+}
+
+func fatalIfErr(err error) {
+ if err != nil {
+ log.Fatal(err)
+ }
+}
diff --git a/vendor/github.com/miekg/dns/dane.go b/vendor/github.com/miekg/dns/dane.go
index cdaa833ff..8c4a14ef1 100644
--- a/vendor/github.com/miekg/dns/dane.go
+++ b/vendor/github.com/miekg/dns/dane.go
@@ -6,7 +6,6 @@ import (
"crypto/x509"
"encoding/hex"
"errors"
- "io"
)
// CertificateToDANE converts a certificate to a hex string as used in the TLSA or SMIMEA records.
@@ -23,20 +22,20 @@ func CertificateToDANE(selector, matchingType uint8, cert *x509.Certificate) (st
h := sha256.New()
switch selector {
case 0:
- io.WriteString(h, string(cert.Raw))
+ h.Write(cert.Raw)
return hex.EncodeToString(h.Sum(nil)), nil
case 1:
- io.WriteString(h, string(cert.RawSubjectPublicKeyInfo))
+ h.Write(cert.RawSubjectPublicKeyInfo)
return hex.EncodeToString(h.Sum(nil)), nil
}
case 2:
h := sha512.New()
switch selector {
case 0:
- io.WriteString(h, string(cert.Raw))
+ h.Write(cert.Raw)
return hex.EncodeToString(h.Sum(nil)), nil
case 1:
- io.WriteString(h, string(cert.RawSubjectPublicKeyInfo))
+ h.Write(cert.RawSubjectPublicKeyInfo)
return hex.EncodeToString(h.Sum(nil)), nil
}
}
diff --git a/vendor/github.com/miekg/dns/dns_test.go b/vendor/github.com/miekg/dns/dns_test.go
index ad68533fd..dbfe25328 100644
--- a/vendor/github.com/miekg/dns/dns_test.go
+++ b/vendor/github.com/miekg/dns/dns_test.go
@@ -310,6 +310,23 @@ func TestMsgLengthCompressionMalformed(t *testing.T) {
m.Len() // Should not crash.
}
+func TestMsgCompressLength2(t *testing.T) {
+ msg := new(Msg)
+ msg.Compress = true
+ msg.SetQuestion(Fqdn("bliep."), TypeANY)
+ msg.Answer = append(msg.Answer, &SRV{Hdr: RR_Header{Name: "blaat.", Rrtype: 0x21, Class: 0x1, Ttl: 0x3c}, Port: 0x4c57, Target: "foo.bar."})
+ msg.Extra = append(msg.Extra, &A{Hdr: RR_Header{Name: "foo.bar.", Rrtype: 0x1, Class: 0x1, Ttl: 0x3c}, A: net.IP{0xac, 0x11, 0x0, 0x3}})
+ predicted := msg.Len()
+ buf, err := msg.Pack()
+ if err != nil {
+ t.Error(err)
+ }
+ if predicted != len(buf) {
+ t.Errorf("predicted compressed length is wrong: predicted %s (len=%d) %d, actual %d",
+ msg.Question[0].Name, len(msg.Answer), predicted, len(buf))
+ }
+}
+
func TestToRFC3597(t *testing.T) {
a, _ := NewRR("miek.nl. IN A 10.0.1.1")
x := new(RFC3597)
diff --git a/vendor/github.com/miekg/dns/dnssec.go b/vendor/github.com/miekg/dns/dnssec.go
index f5f3fbdd8..07262011e 100644
--- a/vendor/github.com/miekg/dns/dnssec.go
+++ b/vendor/github.com/miekg/dns/dnssec.go
@@ -43,7 +43,7 @@ const (
PRIVATEOID uint8 = 254
)
-// Map for algorithm names.
+// AlgorithmToString is a map of algorithm IDs to algorithm names.
var AlgorithmToString = map[uint8]string{
RSAMD5: "RSAMD5",
DH: "DH",
@@ -61,10 +61,10 @@ var AlgorithmToString = map[uint8]string{
PRIVATEOID: "PRIVATEOID",
}
-// Map of algorithm strings.
+// StringToAlgorithm is the reverse of AlgorithmToString.
var StringToAlgorithm = reverseInt8(AlgorithmToString)
-// Map of algorithm crypto hashes.
+// AlgorithmToHash is a map of algorithm crypto hash IDs to crypto.Hash's.
var AlgorithmToHash = map[uint8]crypto.Hash{
RSAMD5: crypto.MD5, // Deprecated in RFC 6725
RSASHA1: crypto.SHA1,
@@ -85,7 +85,7 @@ const (
SHA512 // Experimental
)
-// Map for hash names.
+// HashToString is a map of hash IDs to names.
var HashToString = map[uint8]string{
SHA1: "SHA1",
SHA256: "SHA256",
@@ -94,7 +94,7 @@ var HashToString = map[uint8]string{
SHA512: "SHA512",
}
-// Map of hash strings.
+// StringToHash is a map of names to hash IDs.
var StringToHash = reverseInt8(HashToString)
// DNSKEY flag values.
@@ -208,9 +208,6 @@ func (k *DNSKEY) ToDS(h uint8) *DS {
// "|" denotes concatenation
// DNSKEY RDATA = Flags | Protocol | Algorithm | Public Key.
- // digest buffer
- digest := append(owner, wire...) // another copy
-
var hash crypto.Hash
switch h {
case SHA1:
@@ -226,7 +223,8 @@ func (k *DNSKEY) ToDS(h uint8) *DS {
}
s := hash.New()
- s.Write(digest)
+ s.Write(owner)
+ s.Write(wire)
ds.Digest = hex.EncodeToString(s.Sum(nil))
return ds
}
@@ -297,7 +295,6 @@ func (rr *RRSIG) Sign(k crypto.Signer, rrset []RR) error {
if err != nil {
return err
}
- signdata = append(signdata, wire...)
hash, ok := AlgorithmToHash[rr.Algorithm]
if !ok {
@@ -306,6 +303,7 @@ func (rr *RRSIG) Sign(k crypto.Signer, rrset []RR) error {
h := hash.New()
h.Write(signdata)
+ h.Write(wire)
signature, err := sign(k, h.Sum(nil), hash, rr.Algorithm)
if err != nil {
@@ -415,7 +413,6 @@ func (rr *RRSIG) Verify(k *DNSKEY, rrset []RR) error {
if err != nil {
return err
}
- signeddata = append(signeddata, wire...)
sigbuf := rr.sigBuf() // Get the binary signature data
if rr.Algorithm == PRIVATEDNS { // PRIVATEOID
@@ -438,6 +435,7 @@ func (rr *RRSIG) Verify(k *DNSKEY, rrset []RR) error {
h := hash.New()
h.Write(signeddata)
+ h.Write(wire)
return rsa.VerifyPKCS1v15(pubkey, hash, h.Sum(nil), sigbuf)
case ECDSAP256SHA256, ECDSAP384SHA384:
@@ -452,6 +450,7 @@ func (rr *RRSIG) Verify(k *DNSKEY, rrset []RR) error {
h := hash.New()
h.Write(signeddata)
+ h.Write(wire)
if ecdsa.Verify(pubkey, h.Sum(nil), r, s) {
return nil
}
diff --git a/vendor/github.com/miekg/dns/dnssec_keygen.go b/vendor/github.com/miekg/dns/dnssec_keygen.go
index 229a07937..5e4b7741a 100644
--- a/vendor/github.com/miekg/dns/dnssec_keygen.go
+++ b/vendor/github.com/miekg/dns/dnssec_keygen.go
@@ -121,17 +121,17 @@ func (k *DNSKEY) setPublicKeyDSA(_Q, _P, _G, _Y *big.Int) bool {
// RFC 3110: Section 2. RSA Public KEY Resource Records
func exponentToBuf(_E int) []byte {
var buf []byte
- i := big.NewInt(int64(_E))
- if len(i.Bytes()) < 256 {
- buf = make([]byte, 1)
- buf[0] = uint8(len(i.Bytes()))
+ i := big.NewInt(int64(_E)).Bytes()
+ if len(i) < 256 {
+ buf = make([]byte, 1, 1+len(i))
+ buf[0] = uint8(len(i))
} else {
- buf = make([]byte, 3)
+ buf = make([]byte, 3, 3+len(i))
buf[0] = 0
- buf[1] = uint8(len(i.Bytes()) >> 8)
- buf[2] = uint8(len(i.Bytes()))
+ buf[1] = uint8(len(i) >> 8)
+ buf[2] = uint8(len(i))
}
- buf = append(buf, i.Bytes()...)
+ buf = append(buf, i...)
return buf
}
diff --git a/vendor/github.com/miekg/dns/dnssec_keyscan.go b/vendor/github.com/miekg/dns/dnssec_keyscan.go
index 9ff3a617e..4f8d830b8 100644
--- a/vendor/github.com/miekg/dns/dnssec_keyscan.go
+++ b/vendor/github.com/miekg/dns/dnssec_keyscan.go
@@ -36,7 +36,7 @@ func (k *DNSKEY) ReadPrivateKey(q io.Reader, file string) (crypto.PrivateKey, er
return nil, ErrPrivKey
}
// TODO(mg): check if the pubkey matches the private key
- algo, err := strconv.Atoi(strings.SplitN(m["algorithm"], " ", 2)[0])
+ algo, err := strconv.ParseUint(strings.SplitN(m["algorithm"], " ", 2)[0], 10, 8)
if err != nil {
return nil, ErrPrivKey
}
diff --git a/vendor/github.com/miekg/dns/edns.go b/vendor/github.com/miekg/dns/edns.go
index 465b85f37..dbff3714c 100644
--- a/vendor/github.com/miekg/dns/edns.go
+++ b/vendor/github.com/miekg/dns/edns.go
@@ -157,7 +157,7 @@ type EDNS0 interface {
String() string
}
-// The nsid EDNS0 option is used to retrieve a nameserver
+// EDNS0_NSID option is used to retrieve a nameserver
// identifier. When sending a request Nsid must be set to the empty string
// The identifier is an opaque string encoded as hex.
// Basic use pattern for creating an nsid option:
@@ -197,7 +197,7 @@ func (e *EDNS0_NSID) String() string { return string(e.Nsid) }
// e := new(dns.EDNS0_SUBNET)
// e.Code = dns.EDNS0SUBNET
// e.Family = 1 // 1 for IPv4 source address, 2 for IPv6
-// e.SourceNetMask = 32 // 32 for IPV4, 128 for IPv6
+// e.SourceNetmask = 32 // 32 for IPV4, 128 for IPv6
// e.SourceScope = 0
// e.Address = net.ParseIP("127.0.0.1").To4() // for IPv4
// // e.Address = net.ParseIP("2001:7b8:32a::2") // for IPV6
@@ -301,7 +301,7 @@ func (e *EDNS0_SUBNET) String() (s string) {
return
}
-// The Cookie EDNS0 option
+// The EDNS0_COOKIE option is used to add a DNS Cookie to a message.
//
// o := new(dns.OPT)
// o.Hdr.Name = "."
@@ -543,15 +543,15 @@ func (e *EDNS0_LOCAL) unpack(b []byte) error {
return nil
}
+// EDNS0_TCP_KEEPALIVE is an EDNS0 option that instructs the server to keep
+// the TCP connection alive. See RFC 7828.
type EDNS0_TCP_KEEPALIVE struct {
Code uint16 // Always EDNSTCPKEEPALIVE
Length uint16 // the value 0 if the TIMEOUT is omitted, the value 2 if it is present;
Timeout uint16 // an idle timeout value for the TCP connection, specified in units of 100 milliseconds, encoded in network byte order.
}
-func (e *EDNS0_TCP_KEEPALIVE) Option() uint16 {
- return EDNS0TCPKEEPALIVE
-}
+func (e *EDNS0_TCP_KEEPALIVE) Option() uint16 { return EDNS0TCPKEEPALIVE }
func (e *EDNS0_TCP_KEEPALIVE) pack() ([]byte, error) {
if e.Timeout != 0 && e.Length != 2 {
diff --git a/vendor/github.com/miekg/dns/idn/punycode.go b/vendor/github.com/miekg/dns/idn/punycode.go
index 7e5c263fc..1d03bf6ae 100644
--- a/vendor/github.com/miekg/dns/idn/punycode.go
+++ b/vendor/github.com/miekg/dns/idn/punycode.go
@@ -242,11 +242,8 @@ func encode(input []byte) []byte {
t, k, cp rune // weight and codepoint calculation
)
- s := &bytes.Buffer{}
for h := basiclen; h < fulllen; n, delta = n+1, delta+1 {
nextltr = next(b, n)
- s.Truncate(0)
- s.WriteRune(nextltr)
delta, n = delta+(nextltr-n)*rune(h+1), nextltr
for _, ltr = range b {
diff --git a/vendor/github.com/miekg/dns/msg.go b/vendor/github.com/miekg/dns/msg.go
index 0d8cc6fb3..b5c074f05 100644
--- a/vendor/github.com/miekg/dns/msg.go
+++ b/vendor/github.com/miekg/dns/msg.go
@@ -9,6 +9,7 @@
package dns
//go:generate go run msg_generate.go
+//go:generate go run compress_generate.go
import (
crand "crypto/rand"
@@ -16,22 +17,9 @@ import (
"math/big"
"math/rand"
"strconv"
+ "sync"
)
-func init() {
- // Initialize default math/rand source using crypto/rand to provide better
- // security without the performance trade-off.
- buf := make([]byte, 8)
- _, err := crand.Read(buf)
- if err != nil {
- // Failed to read from cryptographic source, fallback to default initial
- // seed (1) by returning early
- return
- }
- seed := binary.BigEndian.Uint64(buf)
- rand.Seed(int64(seed))
-}
-
const maxCompressionOffset = 2 << 13 // We have 14 bits for the compression pointer
var (
@@ -66,11 +54,45 @@ var (
// dns.Id = func() uint16 { return 3 }
var Id func() uint16 = id
+var (
+ idLock sync.Mutex
+ idRand *rand.Rand
+)
+
// id returns a 16 bits random number to be used as a
// message id. The random provided should be good enough.
func id() uint16 {
- id32 := rand.Uint32()
- return uint16(id32)
+ idLock.Lock()
+
+ if idRand == nil {
+ // This (partially) works around
+ // https://github.com/golang/go/issues/11833 by only
+ // seeding idRand upon the first call to id.
+
+ var seed int64
+ var buf [8]byte
+
+ if _, err := crand.Read(buf[:]); err == nil {
+ seed = int64(binary.LittleEndian.Uint64(buf[:]))
+ } else {
+ seed = rand.Int63()
+ }
+
+ idRand = rand.New(rand.NewSource(seed))
+ }
+
+ // The call to idRand.Uint32 must be within the
+ // mutex lock because *rand.Rand is not safe for
+ // concurrent use.
+ //
+ // There is no added performance overhead to calling
+ // idRand.Uint32 inside a mutex lock over just
+ // calling rand.Uint32 as the global math/rand rng
+ // is internally protected by a sync.Mutex.
+ id := uint16(idRand.Uint32())
+
+ idLock.Unlock()
+ return id
}
// MsgHdr is a a manually-unpacked version of (id, bits).
@@ -241,7 +263,9 @@ func packDomainName(s string, msg []byte, off int, compression map[string]int, c
bsFresh = true
}
// Don't try to compress '.'
- if compress && roBs[begin:] != "." {
+ // We should only compress when compress it true, but we should also still pick
+ // up names that can be used for *future* compression(s).
+ if compression != nil && roBs[begin:] != "." {
if p, ok := compression[roBs[begin:]]; !ok {
// Only offsets smaller than this can be used.
if offset < maxCompressionOffset {
@@ -303,6 +327,7 @@ End:
// UnpackDomainName unpacks a domain name into a string.
func UnpackDomainName(msg []byte, off int) (string, int, error) {
s := make([]byte, 0, 64)
+ labels := 0
off1 := 0
lenmsg := len(msg)
ptr := 0 // number of pointers followed
@@ -345,6 +370,15 @@ Loop:
}
}
}
+ // never exceed the allowed label count lenght (63)
+ if labels >= 63 {
+ return "", lenmsg, &Error{err: "name exceeds 63 labels"}
+ }
+ labels += 1
+ // never exceed the allowed doman name length (255 octets)
+ if len(s) >= 255 {
+ return "", lenmsg, &Error{err: "name exceeded allowed 255 octets"}
+ }
s = append(s, '.')
off += c
case 0xC0:
@@ -364,6 +398,9 @@ Loop:
if ptr++; ptr > 10 {
return "", lenmsg, &Error{err: "too many compression pointers"}
}
+ // pointer should guarantee that it advances and points forwards at least
+ // but the condition on previous three lines guarantees that it's
+ // at least loop-free
off = (c^0xC0)<<8 | int(c1)
default:
// 0x80 and 0x40 are reserved
@@ -710,12 +747,10 @@ func (dns *Msg) PackBuffer(buf []byte) (msg []byte, err error) {
// We need the uncompressed length here, because we first pack it and then compress it.
msg = buf
- compress := dns.Compress
- dns.Compress = false
- if packLen := dns.Len() + 1; len(msg) < packLen {
+ uncompressedLen := compressedLen(dns, false)
+ if packLen := uncompressedLen + 1; len(msg) < packLen {
msg = make([]byte, packLen)
}
- dns.Compress = compress
// Pack it in: header and then the pieces.
off := 0
@@ -868,16 +903,18 @@ func (dns *Msg) String() string {
// If dns.Compress is true compression it is taken into account. Len()
// is provided to be a faster way to get the size of the resulting packet,
// than packing it, measuring the size and discarding the buffer.
-func (dns *Msg) Len() int {
+func (dns *Msg) Len() int { return compressedLen(dns, dns.Compress) }
+
+// compressedLen returns the message length when in compressed wire format
+// when compress is true, otherwise the uncompressed length is returned.
+func compressedLen(dns *Msg, compress bool) int {
// We always return one more than needed.
l := 12 // Message header is always 12 bytes
- var compression map[string]int
- if dns.Compress {
- compression = make(map[string]int)
- }
+ compression := map[string]int{}
+
for i := 0; i < len(dns.Question); i++ {
l += dns.Question[i].len()
- if dns.Compress {
+ if compress {
compressionLenHelper(compression, dns.Question[i].Name)
}
}
@@ -886,7 +923,7 @@ func (dns *Msg) Len() int {
continue
}
l += dns.Answer[i].len()
- if dns.Compress {
+ if compress {
k, ok := compressionLenSearch(compression, dns.Answer[i].Header().Name)
if ok {
l += 1 - k
@@ -904,7 +941,7 @@ func (dns *Msg) Len() int {
continue
}
l += dns.Ns[i].len()
- if dns.Compress {
+ if compress {
k, ok := compressionLenSearch(compression, dns.Ns[i].Header().Name)
if ok {
l += 1 - k
@@ -922,7 +959,7 @@ func (dns *Msg) Len() int {
continue
}
l += dns.Extra[i].len()
- if dns.Compress {
+ if compress {
k, ok := compressionLenSearch(compression, dns.Extra[i].Header().Name)
if ok {
l += 1 - k
@@ -970,97 +1007,6 @@ func compressionLenSearch(c map[string]int, s string) (int, bool) {
return 0, false
}
-// TODO(miek): should add all types, because the all can be *used* for compression. Autogenerate from msg_generate and put in zmsg.go
-func compressionLenHelperType(c map[string]int, r RR) {
- switch x := r.(type) {
- case *NS:
- compressionLenHelper(c, x.Ns)
- case *MX:
- compressionLenHelper(c, x.Mx)
- case *CNAME:
- compressionLenHelper(c, x.Target)
- case *PTR:
- compressionLenHelper(c, x.Ptr)
- case *SOA:
- compressionLenHelper(c, x.Ns)
- compressionLenHelper(c, x.Mbox)
- case *MB:
- compressionLenHelper(c, x.Mb)
- case *MG:
- compressionLenHelper(c, x.Mg)
- case *MR:
- compressionLenHelper(c, x.Mr)
- case *MF:
- compressionLenHelper(c, x.Mf)
- case *MD:
- compressionLenHelper(c, x.Md)
- case *RT:
- compressionLenHelper(c, x.Host)
- case *RP:
- compressionLenHelper(c, x.Mbox)
- compressionLenHelper(c, x.Txt)
- case *MINFO:
- compressionLenHelper(c, x.Rmail)
- compressionLenHelper(c, x.Email)
- case *AFSDB:
- compressionLenHelper(c, x.Hostname)
- case *SRV:
- compressionLenHelper(c, x.Target)
- case *NAPTR:
- compressionLenHelper(c, x.Replacement)
- case *RRSIG:
- compressionLenHelper(c, x.SignerName)
- case *NSEC:
- compressionLenHelper(c, x.NextDomain)
- // HIP?
- }
-}
-
-// Only search on compressing these types.
-func compressionLenSearchType(c map[string]int, r RR) (int, bool) {
- switch x := r.(type) {
- case *NS:
- return compressionLenSearch(c, x.Ns)
- case *MX:
- return compressionLenSearch(c, x.Mx)
- case *CNAME:
- return compressionLenSearch(c, x.Target)
- case *DNAME:
- return compressionLenSearch(c, x.Target)
- case *PTR:
- return compressionLenSearch(c, x.Ptr)
- case *SOA:
- k, ok := compressionLenSearch(c, x.Ns)
- k1, ok1 := compressionLenSearch(c, x.Mbox)
- if !ok && !ok1 {
- return 0, false
- }
- return k + k1, true
- case *MB:
- return compressionLenSearch(c, x.Mb)
- case *MG:
- return compressionLenSearch(c, x.Mg)
- case *MR:
- return compressionLenSearch(c, x.Mr)
- case *MF:
- return compressionLenSearch(c, x.Mf)
- case *MD:
- return compressionLenSearch(c, x.Md)
- case *RT:
- return compressionLenSearch(c, x.Host)
- case *MINFO:
- k, ok := compressionLenSearch(c, x.Rmail)
- k1, ok1 := compressionLenSearch(c, x.Email)
- if !ok && !ok1 {
- return 0, false
- }
- return k + k1, true
- case *AFSDB:
- return compressionLenSearch(c, x.Hostname)
- }
- return 0, false
-}
-
// Copy returns a new RR which is a deep-copy of r.
func Copy(r RR) RR { r1 := r.copy(); return r1 }
diff --git a/vendor/github.com/miekg/dns/nsecx.go b/vendor/github.com/miekg/dns/nsecx.go
index 6f10f3e65..51ce7f8b1 100644
--- a/vendor/github.com/miekg/dns/nsecx.go
+++ b/vendor/github.com/miekg/dns/nsecx.go
@@ -3,7 +3,6 @@ package dns
import (
"crypto/sha1"
"hash"
- "io"
"strings"
)
@@ -36,15 +35,15 @@ func HashName(label string, ha uint8, iter uint16, salt string) string {
}
// k = 0
- name = append(name, wire...)
- io.WriteString(s, string(name))
+ s.Write(name)
+ s.Write(wire)
nsec3 := s.Sum(nil)
// k > 0
for k := uint16(0); k < iter; k++ {
s.Reset()
- nsec3 = append(nsec3, wire...)
- io.WriteString(s, string(nsec3))
- nsec3 = s.Sum(nil)
+ s.Write(nsec3)
+ s.Write(wire)
+ nsec3 = s.Sum(nsec3[:0])
}
return toBase32(nsec3)
}
diff --git a/vendor/github.com/miekg/dns/parse_test.go b/vendor/github.com/miekg/dns/parse_test.go
index dc18b59ce..c727c1301 100644
--- a/vendor/github.com/miekg/dns/parse_test.go
+++ b/vendor/github.com/miekg/dns/parse_test.go
@@ -836,11 +836,7 @@ func TestSRVPacking(t *testing.T) {
if err != nil {
continue
}
- port := 8484
- tmp, err := strconv.Atoi(p)
- if err == nil {
- port = tmp
- }
+ port, _ := strconv.ParseUint(p, 10, 16)
rr := &SRV{
Hdr: RR_Header{Name: "somename.",
diff --git a/vendor/github.com/miekg/dns/reverse.go b/vendor/github.com/miekg/dns/reverse.go
index 099dac948..f6e7a47a6 100644
--- a/vendor/github.com/miekg/dns/reverse.go
+++ b/vendor/github.com/miekg/dns/reverse.go
@@ -6,10 +6,10 @@ var StringToType = reverseInt16(TypeToString)
// StringToClass is the reverse of ClassToString, needed for string parsing.
var StringToClass = reverseInt16(ClassToString)
-// Map of opcodes strings.
+// StringToOpcode is a map of opcodes to strings.
var StringToOpcode = reverseInt(OpcodeToString)
-// Map of rcodes strings.
+// StringToRcode is a map of rcodes to strings.
var StringToRcode = reverseInt(RcodeToString)
// Reverse a map
diff --git a/vendor/github.com/miekg/dns/scan.go b/vendor/github.com/miekg/dns/scan.go
index d34597ba3..de0db32f8 100644
--- a/vendor/github.com/miekg/dns/scan.go
+++ b/vendor/github.com/miekg/dns/scan.go
@@ -819,8 +819,8 @@ func classToInt(token string) (uint16, bool) {
if len(token) < offset+1 {
return 0, false
}
- class, ok := strconv.Atoi(token[offset:])
- if ok != nil || class > maxUint16 {
+ class, err := strconv.ParseUint(token[offset:], 10, 16)
+ if err != nil {
return 0, false
}
return uint16(class), true
@@ -832,8 +832,8 @@ func typeToInt(token string) (uint16, bool) {
if len(token) < offset+1 {
return 0, false
}
- typ, ok := strconv.Atoi(token[offset:])
- if ok != nil || typ > maxUint16 {
+ typ, err := strconv.ParseUint(token[offset:], 10, 16)
+ if err != nil {
return 0, false
}
return uint16(typ), true
diff --git a/vendor/github.com/miekg/dns/scan_rr.go b/vendor/github.com/miekg/dns/scan_rr.go
index 8d6a1bf24..f4c0d3767 100644
--- a/vendor/github.com/miekg/dns/scan_rr.go
+++ b/vendor/github.com/miekg/dns/scan_rr.go
@@ -447,7 +447,7 @@ func setMX(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) {
if l.length == 0 {
return rr, nil, ""
}
- i, e := strconv.Atoi(l.token)
+ i, e := strconv.ParseUint(l.token, 10, 16)
if e != nil || l.err {
return nil, &ParseError{f, "bad MX Pref", l}, ""
}
@@ -476,7 +476,7 @@ func setRT(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) {
if l.length == 0 {
return rr, nil, ""
}
- i, e := strconv.Atoi(l.token)
+ i, e := strconv.ParseUint(l.token, 10, 16)
if e != nil {
return nil, &ParseError{f, "bad RT Preference", l}, ""
}
@@ -506,7 +506,7 @@ func setAFSDB(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) {
if l.length == 0 {
return rr, nil, ""
}
- i, e := strconv.Atoi(l.token)
+ i, e := strconv.ParseUint(l.token, 10, 16)
if e != nil || l.err {
return nil, &ParseError{f, "bad AFSDB Subtype", l}, ""
}
@@ -551,7 +551,7 @@ func setKX(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) {
if l.length == 0 {
return rr, nil, ""
}
- i, e := strconv.Atoi(l.token)
+ i, e := strconv.ParseUint(l.token, 10, 16)
if e != nil || l.err {
return nil, &ParseError{f, "bad KX Pref", l}, ""
}
@@ -665,7 +665,7 @@ func setSOA(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) {
if l.err {
return nil, &ParseError{f, "bad SOA zone parameter", l}, ""
}
- if j, e := strconv.Atoi(l.token); e != nil {
+ if j, e := strconv.ParseUint(l.token, 10, 32); e != nil {
if i == 0 {
// Serial should be a number
return nil, &ParseError{f, "bad SOA zone parameter", l}, ""
@@ -705,21 +705,21 @@ func setSRV(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) {
if l.length == 0 {
return rr, nil, ""
}
- i, e := strconv.Atoi(l.token)
+ i, e := strconv.ParseUint(l.token, 10, 16)
if e != nil || l.err {
return nil, &ParseError{f, "bad SRV Priority", l}, ""
}
rr.Priority = uint16(i)
<-c // zBlank
l = <-c // zString
- i, e = strconv.Atoi(l.token)
+ i, e = strconv.ParseUint(l.token, 10, 16)
if e != nil || l.err {
return nil, &ParseError{f, "bad SRV Weight", l}, ""
}
rr.Weight = uint16(i)
<-c // zBlank
l = <-c // zString
- i, e = strconv.Atoi(l.token)
+ i, e = strconv.ParseUint(l.token, 10, 16)
if e != nil || l.err {
return nil, &ParseError{f, "bad SRV Port", l}, ""
}
@@ -749,14 +749,14 @@ func setNAPTR(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) {
if l.length == 0 {
return rr, nil, ""
}
- i, e := strconv.Atoi(l.token)
+ i, e := strconv.ParseUint(l.token, 10, 16)
if e != nil || l.err {
return nil, &ParseError{f, "bad NAPTR Order", l}, ""
}
rr.Order = uint16(i)
<-c // zBlank
l = <-c // zString
- i, e = strconv.Atoi(l.token)
+ i, e = strconv.ParseUint(l.token, 10, 16)
if e != nil || l.err {
return nil, &ParseError{f, "bad NAPTR Preference", l}, ""
}
@@ -885,7 +885,7 @@ func setLOC(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) {
if l.length == 0 {
return rr, nil, ""
}
- i, e := strconv.Atoi(l.token)
+ i, e := strconv.ParseUint(l.token, 10, 32)
if e != nil || l.err {
return nil, &ParseError{f, "bad LOC Latitude", l}, ""
}
@@ -897,7 +897,7 @@ func setLOC(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) {
if rr.Latitude, ok = locCheckNorth(l.token, rr.Latitude); ok {
goto East
}
- i, e = strconv.Atoi(l.token)
+ i, e = strconv.ParseUint(l.token, 10, 32)
if e != nil || l.err {
return nil, &ParseError{f, "bad LOC Latitude minutes", l}, ""
}
@@ -923,7 +923,7 @@ East:
// East
<-c // zBlank
l = <-c
- if i, e := strconv.Atoi(l.token); e != nil || l.err {
+ if i, e := strconv.ParseUint(l.token, 10, 32); e != nil || l.err {
return nil, &ParseError{f, "bad LOC Longitude", l}, ""
} else {
rr.Longitude = 1000 * 60 * 60 * uint32(i)
@@ -934,7 +934,7 @@ East:
if rr.Longitude, ok = locCheckEast(l.token, rr.Longitude); ok {
goto Altitude
}
- if i, e := strconv.Atoi(l.token); e != nil || l.err {
+ if i, e := strconv.ParseUint(l.token, 10, 32); e != nil || l.err {
return nil, &ParseError{f, "bad LOC Longitude minutes", l}, ""
} else {
rr.Longitude += 1000 * 60 * uint32(i)
@@ -1016,7 +1016,7 @@ func setHIP(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) {
if l.length == 0 {
return rr, nil, l.comment
}
- i, e := strconv.Atoi(l.token)
+ i, e := strconv.ParseUint(l.token, 10, 8)
if e != nil || l.err {
return nil, &ParseError{f, "bad HIP PublicKeyAlgorithm", l}, ""
}
@@ -1077,14 +1077,14 @@ func setCERT(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) {
}
if v, ok := StringToCertType[l.token]; ok {
rr.Type = v
- } else if i, e := strconv.Atoi(l.token); e != nil {
+ } else if i, e := strconv.ParseUint(l.token, 10, 16); e != nil {
return nil, &ParseError{f, "bad CERT Type", l}, ""
} else {
rr.Type = uint16(i)
}
<-c // zBlank
l = <-c // zString
- i, e := strconv.Atoi(l.token)
+ i, e := strconv.ParseUint(l.token, 10, 16)
if e != nil || l.err {
return nil, &ParseError{f, "bad CERT KeyTag", l}, ""
}
@@ -1093,7 +1093,7 @@ func setCERT(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) {
l = <-c // zString
if v, ok := StringToAlgorithm[l.token]; ok {
rr.Algorithm = v
- } else if i, e := strconv.Atoi(l.token); e != nil {
+ } else if i, e := strconv.ParseUint(l.token, 10, 8); e != nil {
return nil, &ParseError{f, "bad CERT Algorithm", l}, ""
} else {
rr.Algorithm = uint8(i)
@@ -1148,21 +1148,21 @@ func setRRSIG(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) {
}
<-c // zBlank
l = <-c
- i, err := strconv.Atoi(l.token)
+ i, err := strconv.ParseUint(l.token, 10, 8)
if err != nil || l.err {
return nil, &ParseError{f, "bad RRSIG Algorithm", l}, ""
}
rr.Algorithm = uint8(i)
<-c // zBlank
l = <-c
- i, err = strconv.Atoi(l.token)
+ i, err = strconv.ParseUint(l.token, 10, 8)
if err != nil || l.err {
return nil, &ParseError{f, "bad RRSIG Labels", l}, ""
}
rr.Labels = uint8(i)
<-c // zBlank
l = <-c
- i, err = strconv.Atoi(l.token)
+ i, err = strconv.ParseUint(l.token, 10, 32)
if err != nil || l.err {
return nil, &ParseError{f, "bad RRSIG OrigTtl", l}, ""
}
@@ -1193,7 +1193,7 @@ func setRRSIG(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) {
}
<-c // zBlank
l = <-c
- i, err = strconv.Atoi(l.token)
+ i, err = strconv.ParseUint(l.token, 10, 16)
if err != nil || l.err {
return nil, &ParseError{f, "bad RRSIG KeyTag", l}, ""
}
@@ -1274,21 +1274,21 @@ func setNSEC3(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) {
if l.length == 0 {
return rr, nil, l.comment
}
- i, e := strconv.Atoi(l.token)
+ i, e := strconv.ParseUint(l.token, 10, 8)
if e != nil || l.err {
return nil, &ParseError{f, "bad NSEC3 Hash", l}, ""
}
rr.Hash = uint8(i)
<-c // zBlank
l = <-c
- i, e = strconv.Atoi(l.token)
+ i, e = strconv.ParseUint(l.token, 10, 8)
if e != nil || l.err {
return nil, &ParseError{f, "bad NSEC3 Flags", l}, ""
}
rr.Flags = uint8(i)
<-c // zBlank
l = <-c
- i, e = strconv.Atoi(l.token)
+ i, e = strconv.ParseUint(l.token, 10, 16)
if e != nil || l.err {
return nil, &ParseError{f, "bad NSEC3 Iterations", l}, ""
}
@@ -1342,21 +1342,21 @@ func setNSEC3PARAM(h RR_Header, c chan lex, o, f string) (RR, *ParseError, strin
if l.length == 0 {
return rr, nil, ""
}
- i, e := strconv.Atoi(l.token)
+ i, e := strconv.ParseUint(l.token, 10, 8)
if e != nil || l.err {
return nil, &ParseError{f, "bad NSEC3PARAM Hash", l}, ""
}
rr.Hash = uint8(i)
<-c // zBlank
l = <-c
- i, e = strconv.Atoi(l.token)
+ i, e = strconv.ParseUint(l.token, 10, 8)
if e != nil || l.err {
return nil, &ParseError{f, "bad NSEC3PARAM Flags", l}, ""
}
rr.Flags = uint8(i)
<-c // zBlank
l = <-c
- i, e = strconv.Atoi(l.token)
+ i, e = strconv.ParseUint(l.token, 10, 16)
if e != nil || l.err {
return nil, &ParseError{f, "bad NSEC3PARAM Iterations", l}, ""
}
@@ -1440,14 +1440,14 @@ func setSSHFP(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) {
if l.length == 0 {
return rr, nil, ""
}
- i, e := strconv.Atoi(l.token)
+ i, e := strconv.ParseUint(l.token, 10, 8)
if e != nil || l.err {
return nil, &ParseError{f, "bad SSHFP Algorithm", l}, ""
}
rr.Algorithm = uint8(i)
<-c // zBlank
l = <-c
- i, e = strconv.Atoi(l.token)
+ i, e = strconv.ParseUint(l.token, 10, 8)
if e != nil || l.err {
return nil, &ParseError{f, "bad SSHFP Type", l}, ""
}
@@ -1469,21 +1469,21 @@ func setDNSKEYs(h RR_Header, c chan lex, o, f, typ string) (RR, *ParseError, str
if l.length == 0 {
return rr, nil, l.comment
}
- i, e := strconv.Atoi(l.token)
+ i, e := strconv.ParseUint(l.token, 10, 16)
if e != nil || l.err {
return nil, &ParseError{f, "bad " + typ + " Flags", l}, ""
}
rr.Flags = uint16(i)
<-c // zBlank
l = <-c // zString
- i, e = strconv.Atoi(l.token)
+ i, e = strconv.ParseUint(l.token, 10, 8)
if e != nil || l.err {
return nil, &ParseError{f, "bad " + typ + " Protocol", l}, ""
}
rr.Protocol = uint8(i)
<-c // zBlank
l = <-c // zString
- i, e = strconv.Atoi(l.token)
+ i, e = strconv.ParseUint(l.token, 10, 8)
if e != nil || l.err {
return nil, &ParseError{f, "bad " + typ + " Algorithm", l}, ""
}
@@ -1525,21 +1525,21 @@ func setRKEY(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) {
if l.length == 0 {
return rr, nil, l.comment
}
- i, e := strconv.Atoi(l.token)
+ i, e := strconv.ParseUint(l.token, 10, 16)
if e != nil || l.err {
return nil, &ParseError{f, "bad RKEY Flags", l}, ""
}
rr.Flags = uint16(i)
<-c // zBlank
l = <-c // zString
- i, e = strconv.Atoi(l.token)
+ i, e = strconv.ParseUint(l.token, 10, 8)
if e != nil || l.err {
return nil, &ParseError{f, "bad RKEY Protocol", l}, ""
}
rr.Protocol = uint8(i)
<-c // zBlank
l = <-c // zString
- i, e = strconv.Atoi(l.token)
+ i, e = strconv.ParseUint(l.token, 10, 8)
if e != nil || l.err {
return nil, &ParseError{f, "bad RKEY Algorithm", l}, ""
}
@@ -1610,14 +1610,14 @@ func setDSs(h RR_Header, c chan lex, o, f, typ string) (RR, *ParseError, string)
if l.length == 0 {
return rr, nil, l.comment
}
- i, e := strconv.Atoi(l.token)
+ i, e := strconv.ParseUint(l.token, 10, 16)
if e != nil || l.err {
return nil, &ParseError{f, "bad " + typ + " KeyTag", l}, ""
}
rr.KeyTag = uint16(i)
<-c // zBlank
l = <-c
- if i, e := strconv.Atoi(l.token); e != nil {
+ if i, e = strconv.ParseUint(l.token, 10, 8); e != nil {
i, ok := StringToAlgorithm[l.tokenUpper]
if !ok || l.err {
return nil, &ParseError{f, "bad " + typ + " Algorithm", l}, ""
@@ -1628,7 +1628,7 @@ func setDSs(h RR_Header, c chan lex, o, f, typ string) (RR, *ParseError, string)
}
<-c // zBlank
l = <-c
- i, e = strconv.Atoi(l.token)
+ i, e = strconv.ParseUint(l.token, 10, 8)
if e != nil || l.err {
return nil, &ParseError{f, "bad " + typ + " DigestType", l}, ""
}
@@ -1669,14 +1669,14 @@ func setTA(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) {
if l.length == 0 {
return rr, nil, l.comment
}
- i, e := strconv.Atoi(l.token)
+ i, e := strconv.ParseUint(l.token, 10, 16)
if e != nil || l.err {
return nil, &ParseError{f, "bad TA KeyTag", l}, ""
}
rr.KeyTag = uint16(i)
<-c // zBlank
l = <-c
- if i, e := strconv.Atoi(l.token); e != nil {
+ if i, e := strconv.ParseUint(l.token, 10, 8); e != nil {
i, ok := StringToAlgorithm[l.tokenUpper]
if !ok || l.err {
return nil, &ParseError{f, "bad TA Algorithm", l}, ""
@@ -1687,7 +1687,7 @@ func setTA(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) {
}
<-c // zBlank
l = <-c
- i, e = strconv.Atoi(l.token)
+ i, e = strconv.ParseUint(l.token, 10, 8)
if e != nil || l.err {
return nil, &ParseError{f, "bad TA DigestType", l}, ""
}
@@ -1707,21 +1707,21 @@ func setTLSA(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) {
if l.length == 0 {
return rr, nil, l.comment
}
- i, e := strconv.Atoi(l.token)
+ i, e := strconv.ParseUint(l.token, 10, 8)
if e != nil || l.err {
return nil, &ParseError{f, "bad TLSA Usage", l}, ""
}
rr.Usage = uint8(i)
<-c // zBlank
l = <-c
- i, e = strconv.Atoi(l.token)
+ i, e = strconv.ParseUint(l.token, 10, 8)
if e != nil || l.err {
return nil, &ParseError{f, "bad TLSA Selector", l}, ""
}
rr.Selector = uint8(i)
<-c // zBlank
l = <-c
- i, e = strconv.Atoi(l.token)
+ i, e = strconv.ParseUint(l.token, 10, 8)
if e != nil || l.err {
return nil, &ParseError{f, "bad TLSA MatchingType", l}, ""
}
@@ -1742,21 +1742,21 @@ func setSMIMEA(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) {
if l.length == 0 {
return rr, nil, l.comment
}
- i, e := strconv.Atoi(l.token)
+ i, e := strconv.ParseUint(l.token, 10, 8)
if e != nil || l.err {
return nil, &ParseError{f, "bad SMIMEA Usage", l}, ""
}
rr.Usage = uint8(i)
<-c // zBlank
l = <-c
- i, e = strconv.Atoi(l.token)
+ i, e = strconv.ParseUint(l.token, 10, 8)
if e != nil || l.err {
return nil, &ParseError{f, "bad SMIMEA Selector", l}, ""
}
rr.Selector = uint8(i)
<-c // zBlank
l = <-c
- i, e = strconv.Atoi(l.token)
+ i, e = strconv.ParseUint(l.token, 10, 8)
if e != nil || l.err {
return nil, &ParseError{f, "bad SMIMEA MatchingType", l}, ""
}
@@ -1842,14 +1842,14 @@ func setURI(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) {
return rr, nil, ""
}
- i, e := strconv.Atoi(l.token)
+ i, e := strconv.ParseUint(l.token, 10, 16)
if e != nil || l.err {
return nil, &ParseError{f, "bad URI Priority", l}, ""
}
rr.Priority = uint16(i)
<-c // zBlank
l = <-c
- i, e = strconv.Atoi(l.token)
+ i, e = strconv.ParseUint(l.token, 10, 16)
if e != nil || l.err {
return nil, &ParseError{f, "bad URI Weight", l}, ""
}
@@ -1888,7 +1888,7 @@ func setNID(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) {
if l.length == 0 {
return rr, nil, ""
}
- i, e := strconv.Atoi(l.token)
+ i, e := strconv.ParseUint(l.token, 10, 16)
if e != nil || l.err {
return nil, &ParseError{f, "bad NID Preference", l}, ""
}
@@ -1911,7 +1911,7 @@ func setL32(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) {
if l.length == 0 {
return rr, nil, ""
}
- i, e := strconv.Atoi(l.token)
+ i, e := strconv.ParseUint(l.token, 10, 16)
if e != nil || l.err {
return nil, &ParseError{f, "bad L32 Preference", l}, ""
}
@@ -1933,7 +1933,7 @@ func setLP(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) {
if l.length == 0 {
return rr, nil, ""
}
- i, e := strconv.Atoi(l.token)
+ i, e := strconv.ParseUint(l.token, 10, 16)
if e != nil || l.err {
return nil, &ParseError{f, "bad LP Preference", l}, ""
}
@@ -1966,7 +1966,7 @@ func setL64(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) {
if l.length == 0 {
return rr, nil, ""
}
- i, e := strconv.Atoi(l.token)
+ i, e := strconv.ParseUint(l.token, 10, 16)
if e != nil || l.err {
return nil, &ParseError{f, "bad L64 Preference", l}, ""
}
@@ -1988,7 +1988,7 @@ func setUID(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) {
if l.length == 0 {
return rr, nil, ""
}
- i, e := strconv.Atoi(l.token)
+ i, e := strconv.ParseUint(l.token, 10, 32)
if e != nil || l.err {
return nil, &ParseError{f, "bad UID Uid", l}, ""
}
@@ -2003,7 +2003,7 @@ func setGID(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) {
if l.length == 0 {
return rr, nil, ""
}
- i, e := strconv.Atoi(l.token)
+ i, e := strconv.ParseUint(l.token, 10, 32)
if e != nil || l.err {
return nil, &ParseError{f, "bad GID Gid", l}, ""
}
@@ -2033,7 +2033,7 @@ func setPX(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) {
if l.length == 0 {
return rr, nil, ""
}
- i, e := strconv.Atoi(l.token)
+ i, e := strconv.ParseUint(l.token, 10, 16)
if e != nil || l.err {
return nil, &ParseError{f, "bad PX Preference", l}, ""
}
@@ -2079,7 +2079,7 @@ func setCAA(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) {
if l.length == 0 {
return rr, nil, l.comment
}
- i, err := strconv.Atoi(l.token)
+ i, err := strconv.ParseUint(l.token, 10, 8)
if err != nil || l.err {
return nil, &ParseError{f, "bad CAA Flag", l}, ""
}
diff --git a/vendor/github.com/miekg/dns/server_test.go b/vendor/github.com/miekg/dns/server_test.go
index 098be2ebe..f17a2f90f 100644
--- a/vendor/github.com/miekg/dns/server_test.go
+++ b/vendor/github.com/miekg/dns/server_test.go
@@ -20,7 +20,7 @@ func HelloServer(w ResponseWriter, req *Msg) {
w.WriteMsg(m)
}
-func HelloServerBadId(w ResponseWriter, req *Msg) {
+func HelloServerBadID(w ResponseWriter, req *Msg) {
m := new(Msg)
m.SetReply(req)
m.Id++
@@ -548,7 +548,7 @@ func TestHandlerCloseTCP(t *testing.T) {
return
}
time.Sleep(time.Second / 10)
- tries += 1
+ tries++
goto exchange
}
}()
diff --git a/vendor/github.com/miekg/dns/sig0.go b/vendor/github.com/miekg/dns/sig0.go
index 2dce06af8..f31e9e684 100644
--- a/vendor/github.com/miekg/dns/sig0.go
+++ b/vendor/github.com/miekg/dns/sig0.go
@@ -60,16 +60,15 @@ func (rr *SIG) Sign(k crypto.Signer, m *Msg) ([]byte, error) {
}
rr.Signature = toBase64(signature)
- sig := string(signature)
- buf = append(buf, sig...)
+ buf = append(buf, signature...)
if len(buf) > int(^uint16(0)) {
return nil, ErrBuf
}
// Adjust sig data length
rdoff := len(mbuf) + 1 + 2 + 2 + 4
rdlen := binary.BigEndian.Uint16(buf[rdoff:])
- rdlen += uint16(len(sig))
+ rdlen += uint16(len(signature))
binary.BigEndian.PutUint16(buf[rdoff:], rdlen)
// Adjust additional count
adc := binary.BigEndian.Uint16(buf[10:])
diff --git a/vendor/github.com/miekg/dns/smimea.go b/vendor/github.com/miekg/dns/smimea.go
index 3a4bb5700..4e7ded4b3 100644
--- a/vendor/github.com/miekg/dns/smimea.go
+++ b/vendor/github.com/miekg/dns/smimea.go
@@ -33,15 +33,15 @@ func (r *SMIMEA) Verify(cert *x509.Certificate) error {
return ErrSig // ErrSig, really?
}
-// SIMEAName returns the ownername of a SMIMEA resource record as per the
+// SMIMEAName returns the ownername of a SMIMEA resource record as per the
// format specified in RFC 'draft-ietf-dane-smime-12' Section 2 and 3
-func SMIMEAName(email_address string, domain_name string) (string, error) {
+func SMIMEAName(email, domain string) (string, error) {
hasher := sha256.New()
- hasher.Write([]byte(email_address))
+ hasher.Write([]byte(email))
// RFC Section 3: "The local-part is hashed using the SHA2-256
// algorithm with the hash truncated to 28 octets and
// represented in its hexadecimal representation to become the
// left-most label in the prepared domain name"
- return hex.EncodeToString(hasher.Sum(nil)[:28]) + "." + "_smimecert." + domain_name, nil
+ return hex.EncodeToString(hasher.Sum(nil)[:28]) + "." + "_smimecert." + domain, nil
}
diff --git a/vendor/github.com/miekg/dns/tsig.go b/vendor/github.com/miekg/dns/tsig.go
index 78365e1c5..24013096b 100644
--- a/vendor/github.com/miekg/dns/tsig.go
+++ b/vendor/github.com/miekg/dns/tsig.go
@@ -9,7 +9,6 @@ import (
"encoding/binary"
"encoding/hex"
"hash"
- "io"
"strconv"
"strings"
"time"
@@ -124,7 +123,7 @@ func TsigGenerate(m *Msg, secret, requestMAC string, timersOnly bool) ([]byte, s
default:
return nil, "", ErrKeyAlg
}
- io.WriteString(h, string(buf))
+ h.Write(buf)
t.MAC = hex.EncodeToString(h.Sum(nil))
t.MACSize = uint16(len(t.MAC) / 2) // Size is half!
diff --git a/vendor/github.com/miekg/dns/types.go b/vendor/github.com/miekg/dns/types.go
index c8b3191e5..c17251cb6 100644
--- a/vendor/github.com/miekg/dns/types.go
+++ b/vendor/github.com/miekg/dns/types.go
@@ -144,7 +144,7 @@ const (
OpcodeUpdate = 5
)
-// Headers is the wire format for the DNS packet header.
+// Header is the wire format for the DNS packet header.
type Header struct {
Id uint16
Bits uint16
diff --git a/vendor/github.com/miekg/dns/types_generate.go b/vendor/github.com/miekg/dns/types_generate.go
index bf80da329..dd1310942 100644
--- a/vendor/github.com/miekg/dns/types_generate.go
+++ b/vendor/github.com/miekg/dns/types_generate.go
@@ -197,7 +197,7 @@ func main() {
case st.Tag(i) == "":
switch st.Field(i).Type().(*types.Basic).Kind() {
case types.Uint8:
- o("l += 1 // %s\n")
+ o("l++ // %s\n")
case types.Uint16:
o("l += 2 // %s\n")
case types.Uint32:
diff --git a/vendor/github.com/miekg/dns/udp.go b/vendor/github.com/miekg/dns/udp.go
index c79c6c883..af111b9a8 100644
--- a/vendor/github.com/miekg/dns/udp.go
+++ b/vendor/github.com/miekg/dns/udp.go
@@ -1,10 +1,9 @@
-// +build !windows,!plan9
+// +build !windows
package dns
import (
"net"
- "syscall"
)
// SessionUDP holds the remote address and the associated
@@ -17,29 +16,6 @@ type SessionUDP struct {
// RemoteAddr returns the remote network address.
func (s *SessionUDP) RemoteAddr() net.Addr { return s.raddr }
-// setUDPSocketOptions sets the UDP socket options.
-// This function is implemented on a per platform basis. See udp_*.go for more details
-func setUDPSocketOptions(conn *net.UDPConn) error {
- sa, err := getUDPSocketName(conn)
- if err != nil {
- return err
- }
- switch sa.(type) {
- case *syscall.SockaddrInet6:
- v6only, err := getUDPSocketOptions6Only(conn)
- if err != nil {
- return err
- }
- setUDPSocketOptions6(conn)
- if !v6only {
- setUDPSocketOptions4(conn)
- }
- case *syscall.SockaddrInet4:
- setUDPSocketOptions4(conn)
- }
- return nil
-}
-
// ReadFromSessionUDP acts just like net.UDPConn.ReadFrom(), but returns a session object instead of a
// net.UDPAddr.
func ReadFromSessionUDP(conn *net.UDPConn, b []byte) (int, *SessionUDP, error) {
diff --git a/vendor/github.com/miekg/dns/udp_linux.go b/vendor/github.com/miekg/dns/udp_linux.go
index 142a80073..033df4239 100644
--- a/vendor/github.com/miekg/dns/udp_linux.go
+++ b/vendor/github.com/miekg/dns/udp_linux.go
@@ -1,4 +1,4 @@
-// +build linux
+// +build linux,!appengine
package dns
@@ -15,6 +15,29 @@ import (
"syscall"
)
+// setUDPSocketOptions sets the UDP socket options.
+// This function is implemented on a per platform basis. See udp_*.go for more details
+func setUDPSocketOptions(conn *net.UDPConn) error {
+ sa, err := getUDPSocketName(conn)
+ if err != nil {
+ return err
+ }
+ switch sa.(type) {
+ case *syscall.SockaddrInet6:
+ v6only, err := getUDPSocketOptions6Only(conn)
+ if err != nil {
+ return err
+ }
+ setUDPSocketOptions6(conn)
+ if !v6only {
+ setUDPSocketOptions4(conn)
+ }
+ case *syscall.SockaddrInet4:
+ setUDPSocketOptions4(conn)
+ }
+ return nil
+}
+
// setUDPSocketOptions4 prepares the v4 socket for sessions.
func setUDPSocketOptions4(conn *net.UDPConn) error {
file, err := conn.File()
diff --git a/vendor/github.com/miekg/dns/udp_other.go b/vendor/github.com/miekg/dns/udp_other.go
index d40732441..488a282b2 100644
--- a/vendor/github.com/miekg/dns/udp_other.go
+++ b/vendor/github.com/miekg/dns/udp_other.go
@@ -1,17 +1,15 @@
-// +build !linux,!plan9
+// +build !linux appengine
package dns
import (
"net"
- "syscall"
)
// These do nothing. See udp_linux.go for an example of how to implement this.
// We tried to adhire to some kind of naming scheme.
-
+func setUDPSocketOptions(conn *net.UDPConn) error { return nil }
func setUDPSocketOptions4(conn *net.UDPConn) error { return nil }
func setUDPSocketOptions6(conn *net.UDPConn) error { return nil }
func getUDPSocketOptions6Only(conn *net.UDPConn) (bool, error) { return false, nil }
-func getUDPSocketName(conn *net.UDPConn) (syscall.Sockaddr, error) { return nil, nil }
diff --git a/vendor/github.com/miekg/dns/udp_plan9.go b/vendor/github.com/miekg/dns/udp_plan9.go
deleted file mode 100644
index b794deeba..000000000
--- a/vendor/github.com/miekg/dns/udp_plan9.go
+++ /dev/null
@@ -1,34 +0,0 @@
-package dns
-
-import (
- "net"
-)
-
-func setUDPSocketOptions(conn *net.UDPConn) error { return nil }
-
-// SessionUDP holds the remote address and the associated
-// out-of-band data.
-type SessionUDP struct {
- raddr *net.UDPAddr
- context []byte
-}
-
-// RemoteAddr returns the remote network address.
-func (s *SessionUDP) RemoteAddr() net.Addr { return s.raddr }
-
-// ReadFromSessionUDP acts just like net.UDPConn.ReadFrom(), but returns a session object instead of a
-// net.UDPAddr.
-func ReadFromSessionUDP(conn *net.UDPConn, b []byte) (int, *SessionUDP, error) {
- oob := make([]byte, 40)
- n, oobn, _, raddr, err := conn.ReadMsgUDP(b, oob)
- if err != nil {
- return n, nil, err
- }
- return n, &SessionUDP{raddr, oob[:oobn]}, err
-}
-
-// WriteToSessionUDP acts just like net.UDPConn.WritetTo(), but uses a *SessionUDP instead of a net.Addr.
-func WriteToSessionUDP(conn *net.UDPConn, b []byte, session *SessionUDP) (int, error) {
- n, _, err := conn.WriteMsgUDP(b, session.context, session.raddr)
- return n, err
-}
diff --git a/vendor/github.com/miekg/dns/udp_windows.go b/vendor/github.com/miekg/dns/udp_windows.go
index 2ce4b3300..51e532ac2 100644
--- a/vendor/github.com/miekg/dns/udp_windows.go
+++ b/vendor/github.com/miekg/dns/udp_windows.go
@@ -8,6 +8,8 @@ type SessionUDP struct {
raddr *net.UDPAddr
}
+func (s *SessionUDP) RemoteAddr() net.Addr { return s.raddr }
+
// ReadFromSessionUDP acts just like net.UDPConn.ReadFrom(), but returns a session object instead of a
// net.UDPAddr.
func ReadFromSessionUDP(conn *net.UDPConn, b []byte) (int, *SessionUDP, error) {
@@ -25,10 +27,3 @@ func WriteToSessionUDP(conn *net.UDPConn, b []byte, session *SessionUDP) (int, e
return n, err
}
-func (s *SessionUDP) RemoteAddr() net.Addr { return s.raddr }
-
-// setUDPSocketOptions sets the UDP socket options.
-// This function is implemented on a per platform basis. See udp_*.go for more details
-func setUDPSocketOptions(conn *net.UDPConn) error {
- return nil
-}
diff --git a/vendor/github.com/miekg/dns/update_test.go b/vendor/github.com/miekg/dns/update_test.go
index 56602dfe9..12760a1ee 100644
--- a/vendor/github.com/miekg/dns/update_test.go
+++ b/vendor/github.com/miekg/dns/update_test.go
@@ -92,28 +92,28 @@ func TestPreReqAndRemovals(t *testing.T) {
m.Id = 1234
// Use a full set of RRs each time, so we are sure the rdata is stripped.
- rr_name1, _ := NewRR("name_used. 3600 IN A 127.0.0.1")
- rr_name2, _ := NewRR("name_not_used. 3600 IN A 127.0.0.1")
- rr_remove1, _ := NewRR("remove1. 3600 IN A 127.0.0.1")
- rr_remove2, _ := NewRR("remove2. 3600 IN A 127.0.0.1")
- rr_remove3, _ := NewRR("remove3. 3600 IN A 127.0.0.1")
- rr_insert, _ := NewRR("insert. 3600 IN A 127.0.0.1")
- rr_rrset1, _ := NewRR("rrset_used1. 3600 IN A 127.0.0.1")
- rr_rrset2, _ := NewRR("rrset_used2. 3600 IN A 127.0.0.1")
- rr_rrset3, _ := NewRR("rrset_not_used. 3600 IN A 127.0.0.1")
+ rrName1, _ := NewRR("name_used. 3600 IN A 127.0.0.1")
+ rrName2, _ := NewRR("name_not_used. 3600 IN A 127.0.0.1")
+ rrRemove1, _ := NewRR("remove1. 3600 IN A 127.0.0.1")
+ rrRemove2, _ := NewRR("remove2. 3600 IN A 127.0.0.1")
+ rrRemove3, _ := NewRR("remove3. 3600 IN A 127.0.0.1")
+ rrInsert, _ := NewRR("insert. 3600 IN A 127.0.0.1")
+ rrRrset1, _ := NewRR("rrset_used1. 3600 IN A 127.0.0.1")
+ rrRrset2, _ := NewRR("rrset_used2. 3600 IN A 127.0.0.1")
+ rrRrset3, _ := NewRR("rrset_not_used. 3600 IN A 127.0.0.1")
// Handle the prereqs.
- m.NameUsed([]RR{rr_name1})
- m.NameNotUsed([]RR{rr_name2})
- m.RRsetUsed([]RR{rr_rrset1})
- m.Used([]RR{rr_rrset2})
- m.RRsetNotUsed([]RR{rr_rrset3})
+ m.NameUsed([]RR{rrName1})
+ m.NameNotUsed([]RR{rrName2})
+ m.RRsetUsed([]RR{rrRrset1})
+ m.Used([]RR{rrRrset2})
+ m.RRsetNotUsed([]RR{rrRrset3})
// and now the updates.
- m.RemoveName([]RR{rr_remove1})
- m.RemoveRRset([]RR{rr_remove2})
- m.Remove([]RR{rr_remove3})
- m.Insert([]RR{rr_insert})
+ m.RemoveName([]RR{rrRemove1})
+ m.RemoveRRset([]RR{rrRemove2})
+ m.Remove([]RR{rrRemove3})
+ m.Insert([]RR{rrInsert})
// This test function isn't a Example function because we print these RR with tabs at the
// end and the Example function trim these, thus they never match.
diff --git a/vendor/github.com/miekg/dns/zcompress.go b/vendor/github.com/miekg/dns/zcompress.go
new file mode 100644
index 000000000..86a31a916
--- /dev/null
+++ b/vendor/github.com/miekg/dns/zcompress.go
@@ -0,0 +1,119 @@
+// *** DO NOT MODIFY ***
+// AUTOGENERATED BY go generate from compress_generate.go
+
+package dns
+
+func compressionLenHelperType(c map[string]int, r RR) {
+ switch x := r.(type) {
+ case *KX:
+ compressionLenHelper(c, x.Exchanger)
+ case *MX:
+ compressionLenHelper(c, x.Mx)
+ case *NSEC:
+ compressionLenHelper(c, x.NextDomain)
+ case *DNAME:
+ compressionLenHelper(c, x.Target)
+ case *HIP:
+ for i := range x.RendezvousServers {
+ compressionLenHelper(c, x.RendezvousServers[i])
+ }
+ case *CNAME:
+ compressionLenHelper(c, x.Target)
+ case *MR:
+ compressionLenHelper(c, x.Mr)
+ case *PX:
+ compressionLenHelper(c, x.Map822)
+ compressionLenHelper(c, x.Mapx400)
+ case *SIG:
+ compressionLenHelper(c, x.SignerName)
+ case *SRV:
+ compressionLenHelper(c, x.Target)
+ case *TALINK:
+ compressionLenHelper(c, x.PreviousName)
+ compressionLenHelper(c, x.NextName)
+ case *LP:
+ compressionLenHelper(c, x.Fqdn)
+ case *NAPTR:
+ compressionLenHelper(c, x.Replacement)
+ case *NS:
+ compressionLenHelper(c, x.Ns)
+ case *RP:
+ compressionLenHelper(c, x.Mbox)
+ compressionLenHelper(c, x.Txt)
+ case *RRSIG:
+ compressionLenHelper(c, x.SignerName)
+ case *TKEY:
+ compressionLenHelper(c, x.Algorithm)
+ case *TSIG:
+ compressionLenHelper(c, x.Algorithm)
+ case *AFSDB:
+ compressionLenHelper(c, x.Hostname)
+ case *MF:
+ compressionLenHelper(c, x.Mf)
+ case *RT:
+ compressionLenHelper(c, x.Host)
+ case *MINFO:
+ compressionLenHelper(c, x.Rmail)
+ compressionLenHelper(c, x.Email)
+ case *PTR:
+ compressionLenHelper(c, x.Ptr)
+ case *SOA:
+ compressionLenHelper(c, x.Ns)
+ compressionLenHelper(c, x.Mbox)
+ case *MD:
+ compressionLenHelper(c, x.Md)
+ case *NSAPPTR:
+ compressionLenHelper(c, x.Ptr)
+ case *MG:
+ compressionLenHelper(c, x.Mg)
+ case *MB:
+ compressionLenHelper(c, x.Mb)
+ }
+}
+
+func compressionLenSearchType(c map[string]int, r RR) (int, bool) {
+ switch x := r.(type) {
+ case *MF:
+ k1, ok1 := compressionLenSearch(c, x.Mf)
+ return k1, ok1
+ case *MG:
+ k1, ok1 := compressionLenSearch(c, x.Mg)
+ return k1, ok1
+ case *MINFO:
+ k1, ok1 := compressionLenSearch(c, x.Rmail)
+ k2, ok2 := compressionLenSearch(c, x.Email)
+ return k1 + k2, ok1 && ok2
+ case *MR:
+ k1, ok1 := compressionLenSearch(c, x.Mr)
+ return k1, ok1
+ case *PTR:
+ k1, ok1 := compressionLenSearch(c, x.Ptr)
+ return k1, ok1
+ case *AFSDB:
+ k1, ok1 := compressionLenSearch(c, x.Hostname)
+ return k1, ok1
+ case *CNAME:
+ k1, ok1 := compressionLenSearch(c, x.Target)
+ return k1, ok1
+ case *MD:
+ k1, ok1 := compressionLenSearch(c, x.Md)
+ return k1, ok1
+ case *RT:
+ k1, ok1 := compressionLenSearch(c, x.Host)
+ return k1, ok1
+ case *SOA:
+ k1, ok1 := compressionLenSearch(c, x.Ns)
+ k2, ok2 := compressionLenSearch(c, x.Mbox)
+ return k1 + k2, ok1 && ok2
+ case *MB:
+ k1, ok1 := compressionLenSearch(c, x.Mb)
+ return k1, ok1
+ case *MX:
+ k1, ok1 := compressionLenSearch(c, x.Mx)
+ return k1, ok1
+ case *NS:
+ k1, ok1 := compressionLenSearch(c, x.Ns)
+ return k1, ok1
+ }
+ return 0, false
+}
diff --git a/vendor/github.com/miekg/dns/ztypes.go b/vendor/github.com/miekg/dns/ztypes.go
index 3c052773e..311b8243b 100644
--- a/vendor/github.com/miekg/dns/ztypes.go
+++ b/vendor/github.com/miekg/dns/ztypes.go
@@ -254,7 +254,7 @@ func (rr *ANY) len() int {
}
func (rr *CAA) len() int {
l := rr.Hdr.len()
- l += 1 // Flag
+ l++ // Flag
l += len(rr.Tag) + 1
l += len(rr.Value)
return l
@@ -263,7 +263,7 @@ func (rr *CERT) len() int {
l := rr.Hdr.len()
l += 2 // Type
l += 2 // KeyTag
- l += 1 // Algorithm
+ l++ // Algorithm
l += base64.StdEncoding.DecodedLen(len(rr.Certificate))
return l
}
@@ -285,16 +285,16 @@ func (rr *DNAME) len() int {
func (rr *DNSKEY) len() int {
l := rr.Hdr.len()
l += 2 // Flags
- l += 1 // Protocol
- l += 1 // Algorithm
+ l++ // Protocol
+ l++ // Algorithm
l += base64.StdEncoding.DecodedLen(len(rr.PublicKey))
return l
}
func (rr *DS) len() int {
l := rr.Hdr.len()
l += 2 // KeyTag
- l += 1 // Algorithm
- l += 1 // DigestType
+ l++ // Algorithm
+ l++ // DigestType
l += len(rr.Digest)/2 + 1
return l
}
@@ -333,8 +333,8 @@ func (rr *HINFO) len() int {
}
func (rr *HIP) len() int {
l := rr.Hdr.len()
- l += 1 // HitLength
- l += 1 // PublicKeyAlgorithm
+ l++ // HitLength
+ l++ // PublicKeyAlgorithm
l += 2 // PublicKeyLength
l += len(rr.Hit)/2 + 1
l += base64.StdEncoding.DecodedLen(len(rr.PublicKey))
@@ -363,10 +363,10 @@ func (rr *L64) len() int {
}
func (rr *LOC) len() int {
l := rr.Hdr.len()
- l += 1 // Version
- l += 1 // Size
- l += 1 // HorizPre
- l += 1 // VertPre
+ l++ // Version
+ l++ // Size
+ l++ // HorizPre
+ l++ // VertPre
l += 4 // Latitude
l += 4 // Longitude
l += 4 // Altitude
@@ -455,10 +455,10 @@ func (rr *NSAPPTR) len() int {
}
func (rr *NSEC3PARAM) len() int {
l := rr.Hdr.len()
- l += 1 // Hash
- l += 1 // Flags
+ l++ // Hash
+ l++ // Flags
l += 2 // Iterations
- l += 1 // SaltLength
+ l++ // SaltLength
l += len(rr.Salt)/2 + 1
return l
}
@@ -487,8 +487,8 @@ func (rr *RFC3597) len() int {
func (rr *RKEY) len() int {
l := rr.Hdr.len()
l += 2 // Flags
- l += 1 // Protocol
- l += 1 // Algorithm
+ l++ // Protocol
+ l++ // Algorithm
l += base64.StdEncoding.DecodedLen(len(rr.PublicKey))
return l
}
@@ -501,8 +501,8 @@ func (rr *RP) len() int {
func (rr *RRSIG) len() int {
l := rr.Hdr.len()
l += 2 // TypeCovered
- l += 1 // Algorithm
- l += 1 // Labels
+ l++ // Algorithm
+ l++ // Labels
l += 4 // OrigTtl
l += 4 // Expiration
l += 4 // Inception
@@ -519,9 +519,9 @@ func (rr *RT) len() int {
}
func (rr *SMIMEA) len() int {
l := rr.Hdr.len()
- l += 1 // Usage
- l += 1 // Selector
- l += 1 // MatchingType
+ l++ // Usage
+ l++ // Selector
+ l++ // MatchingType
l += len(rr.Certificate)/2 + 1
return l
}
@@ -553,16 +553,16 @@ func (rr *SRV) len() int {
}
func (rr *SSHFP) len() int {
l := rr.Hdr.len()
- l += 1 // Algorithm
- l += 1 // Type
+ l++ // Algorithm
+ l++ // Type
l += len(rr.FingerPrint)/2 + 1
return l
}
func (rr *TA) len() int {
l := rr.Hdr.len()
l += 2 // KeyTag
- l += 1 // Algorithm
- l += 1 // DigestType
+ l++ // Algorithm
+ l++ // DigestType
l += len(rr.Digest)/2 + 1
return l
}
@@ -587,9 +587,9 @@ func (rr *TKEY) len() int {
}
func (rr *TLSA) len() int {
l := rr.Hdr.len()
- l += 1 // Usage
- l += 1 // Selector
- l += 1 // MatchingType
+ l++ // Usage
+ l++ // Selector
+ l++ // MatchingType
l += len(rr.Certificate)/2 + 1
return l
}
diff --git a/vendor/github.com/prometheus/client_model/AUTHORS.md b/vendor/github.com/prometheus/client_model/AUTHORS.md
deleted file mode 100644
index e8b3efa6a..000000000
--- a/vendor/github.com/prometheus/client_model/AUTHORS.md
+++ /dev/null
@@ -1,13 +0,0 @@
-The Prometheus project was started by Matt T. Proud (emeritus) and
-Julius Volz in 2012.
-
-Maintainers of this repository:
-
-* Björn Rabenstein <beorn@soundcloud.com>
-
-The following individuals have contributed code to this repository
-(listed in alphabetical order):
-
-* Björn Rabenstein <beorn@soundcloud.com>
-* Matt T. Proud <matt.proud@gmail.com>
-* Tobias Schmidt <ts@soundcloud.com>
diff --git a/vendor/github.com/prometheus/client_model/CONTRIBUTING.md b/vendor/github.com/prometheus/client_model/CONTRIBUTING.md
index 573d58741..40503edbf 100644
--- a/vendor/github.com/prometheus/client_model/CONTRIBUTING.md
+++ b/vendor/github.com/prometheus/client_model/CONTRIBUTING.md
@@ -2,16 +2,16 @@
Prometheus uses GitHub to manage reviews of pull requests.
-* If you have a trivial fix or improvement, go ahead and create a pull
- request, addressing (with `@...`) one or more of the maintainers
- (see [AUTHORS.md](AUTHORS.md)) in the description of the pull request.
+* If you have a trivial fix or improvement, go ahead and create a pull request,
+ addressing (with `@...`) the maintainer of this repository (see
+ [MAINTAINERS.md](MAINTAINERS.md)) in the description of the pull request.
* If you plan to do something more involved, first discuss your ideas
on our [mailing list](https://groups.google.com/forum/?fromgroups#!forum/prometheus-developers).
This will avoid unnecessary work and surely give you and us a good deal
of inspiration.
-* Relevant coding style guidelines for the Go parts are the [Go Code Review
+* Relevant coding style guidelines are the [Go Code Review
Comments](https://code.google.com/p/go-wiki/wiki/CodeReviewComments)
and the _Formatting and style_ section of Peter Bourgon's [Go: Best
Practices for Production
diff --git a/vendor/github.com/prometheus/client_model/MAINTAINERS.md b/vendor/github.com/prometheus/client_model/MAINTAINERS.md
new file mode 100644
index 000000000..3ede55fe1
--- /dev/null
+++ b/vendor/github.com/prometheus/client_model/MAINTAINERS.md
@@ -0,0 +1 @@
+* Björn Rabenstein <beorn@soundcloud.com>
diff --git a/vendor/github.com/prometheus/common/AUTHORS.md b/vendor/github.com/prometheus/common/AUTHORS.md
deleted file mode 100644
index c63f4d395..000000000
--- a/vendor/github.com/prometheus/common/AUTHORS.md
+++ /dev/null
@@ -1,11 +0,0 @@
-Maintainers of this repository:
-
-* Fabian Reinartz <fabian@soundcloud.com>
-
-The following individuals have contributed code to this repository
-(listed in alphabetical order):
-
-* Björn Rabenstein <beorn@soundcloud.com>
-* Fabian Reinartz <fabian@soundcloud.com>
-* Julius Volz <julius.volz@gmail.com>
-* Miguel Molina <hi@mvader.me>
diff --git a/vendor/github.com/prometheus/common/CONTRIBUTING.md b/vendor/github.com/prometheus/common/CONTRIBUTING.md
index 5705f0fbe..40503edbf 100644
--- a/vendor/github.com/prometheus/common/CONTRIBUTING.md
+++ b/vendor/github.com/prometheus/common/CONTRIBUTING.md
@@ -2,9 +2,9 @@
Prometheus uses GitHub to manage reviews of pull requests.
-* If you have a trivial fix or improvement, go ahead and create a pull
- request, addressing (with `@...`) one or more of the maintainers
- (see [AUTHORS.md](AUTHORS.md)) in the description of the pull request.
+* If you have a trivial fix or improvement, go ahead and create a pull request,
+ addressing (with `@...`) the maintainer of this repository (see
+ [MAINTAINERS.md](MAINTAINERS.md)) in the description of the pull request.
* If you plan to do something more involved, first discuss your ideas
on our [mailing list](https://groups.google.com/forum/?fromgroups#!forum/prometheus-developers).
diff --git a/vendor/github.com/prometheus/common/MAINTAINERS.md b/vendor/github.com/prometheus/common/MAINTAINERS.md
new file mode 100644
index 000000000..1b3152161
--- /dev/null
+++ b/vendor/github.com/prometheus/common/MAINTAINERS.md
@@ -0,0 +1 @@
+* Fabian Reinartz <fabian.reinartz@coreos.com>
diff --git a/vendor/github.com/prometheus/common/model/value.go b/vendor/github.com/prometheus/common/model/value.go
index 7728abaee..c9ed3ffd8 100644
--- a/vendor/github.com/prometheus/common/model/value.go
+++ b/vendor/github.com/prometheus/common/model/value.go
@@ -129,11 +129,8 @@ func (s *Sample) Equal(o *Sample) bool {
if !s.Timestamp.Equal(o.Timestamp) {
return false
}
- if s.Value.Equal(o.Value) {
- return false
- }
- return true
+ return s.Value.Equal(o.Value)
}
func (s Sample) String() string {
diff --git a/vendor/github.com/prometheus/common/model/value_test.go b/vendor/github.com/prometheus/common/model/value_test.go
index 8d2b69ea1..b97dcf84c 100644
--- a/vendor/github.com/prometheus/common/model/value_test.go
+++ b/vendor/github.com/prometheus/common/model/value_test.go
@@ -21,7 +21,7 @@ import (
"testing"
)
-func TestEqual(t *testing.T) {
+func TestEqualValues(t *testing.T) {
tests := map[string]struct {
in1, in2 SampleValue
want bool
@@ -76,6 +76,57 @@ func TestEqual(t *testing.T) {
}
}
+func TestEqualSamples(t *testing.T) {
+ testSample := &Sample{}
+
+ tests := map[string]struct {
+ in1, in2 *Sample
+ want bool
+ }{
+ "equal pointers": {
+ in1: testSample,
+ in2: testSample,
+ want: true,
+ },
+ "different metrics": {
+ in1: &Sample{Metric: Metric{"foo": "bar"}},
+ in2: &Sample{Metric: Metric{"foo": "biz"}},
+ want: false,
+ },
+ "different timestamp": {
+ in1: &Sample{Timestamp: 0},
+ in2: &Sample{Timestamp: 1},
+ want: false,
+ },
+ "different value": {
+ in1: &Sample{Value: 0},
+ in2: &Sample{Value: 1},
+ want: false,
+ },
+ "equal samples": {
+ in1: &Sample{
+ Metric: Metric{"foo": "bar"},
+ Timestamp: 0,
+ Value: 1,
+ },
+ in2: &Sample{
+ Metric: Metric{"foo": "bar"},
+ Timestamp: 0,
+ Value: 1,
+ },
+ want: true,
+ },
+ }
+
+ for name, test := range tests {
+ got := test.in1.Equal(test.in2)
+ if got != test.want {
+ t.Errorf("Comparing %s, %v and %v: got %t, want %t", name, test.in1, test.in2, got, test.want)
+ }
+ }
+
+}
+
func TestSamplePairJSON(t *testing.T) {
input := []struct {
plain string
diff --git a/vendor/github.com/prometheus/procfs/AUTHORS.md b/vendor/github.com/prometheus/procfs/AUTHORS.md
deleted file mode 100644
index d55863560..000000000
--- a/vendor/github.com/prometheus/procfs/AUTHORS.md
+++ /dev/null
@@ -1,21 +0,0 @@
-The Prometheus project was started by Matt T. Proud (emeritus) and
-Julius Volz in 2012.
-
-Maintainers of this repository:
-
-* Tobias Schmidt <ts@soundcloud.com>
-
-The following individuals have contributed code to this repository
-(listed in alphabetical order):
-
-* Armen Baghumian <abaghumian@noggin.com.au>
-* Bjoern Rabenstein <beorn@soundcloud.com>
-* David Cournapeau <cournape@gmail.com>
-* Ji-Hoon, Seol <jihoon.seol@gmail.com>
-* Jonas Große Sundrup <cherti@letopolis.de>
-* Julius Volz <julius.volz@gmail.com>
-* Matt Layher <mdlayher@gmail.com>
-* Matthias Rampke <mr@soundcloud.com>
-* Nicky Gerritsen <nicky@streamone.nl>
-* Rémi Audebert <contact@halfr.net>
-* Tobias Schmidt <tobidt@gmail.com>
diff --git a/vendor/github.com/prometheus/procfs/CONTRIBUTING.md b/vendor/github.com/prometheus/procfs/CONTRIBUTING.md
index 5705f0fbe..40503edbf 100644
--- a/vendor/github.com/prometheus/procfs/CONTRIBUTING.md
+++ b/vendor/github.com/prometheus/procfs/CONTRIBUTING.md
@@ -2,9 +2,9 @@
Prometheus uses GitHub to manage reviews of pull requests.
-* If you have a trivial fix or improvement, go ahead and create a pull
- request, addressing (with `@...`) one or more of the maintainers
- (see [AUTHORS.md](AUTHORS.md)) in the description of the pull request.
+* If you have a trivial fix or improvement, go ahead and create a pull request,
+ addressing (with `@...`) the maintainer of this repository (see
+ [MAINTAINERS.md](MAINTAINERS.md)) in the description of the pull request.
* If you plan to do something more involved, first discuss your ideas
on our [mailing list](https://groups.google.com/forum/?fromgroups#!forum/prometheus-developers).
diff --git a/vendor/github.com/prometheus/procfs/MAINTAINERS.md b/vendor/github.com/prometheus/procfs/MAINTAINERS.md
new file mode 100644
index 000000000..35993c41c
--- /dev/null
+++ b/vendor/github.com/prometheus/procfs/MAINTAINERS.md
@@ -0,0 +1 @@
+* Tobias Schmidt <tobidt@gmail.com>
diff --git a/vendor/github.com/prometheus/procfs/README.md b/vendor/github.com/prometheus/procfs/README.md
index 6e7ee6b8b..209549471 100644
--- a/vendor/github.com/prometheus/procfs/README.md
+++ b/vendor/github.com/prometheus/procfs/README.md
@@ -8,3 +8,4 @@ backwards-incompatible ways without warnings. Use it at your own risk.
[![GoDoc](https://godoc.org/github.com/prometheus/procfs?status.png)](https://godoc.org/github.com/prometheus/procfs)
[![Build Status](https://travis-ci.org/prometheus/procfs.svg?branch=master)](https://travis-ci.org/prometheus/procfs)
+[![Go Report Card](https://goreportcard.com/badge/github.com/prometheus/procfs)](https://goreportcard.com/report/github.com/prometheus/procfs)
diff --git a/vendor/github.com/prometheus/procfs/buddyinfo.go b/vendor/github.com/prometheus/procfs/buddyinfo.go
new file mode 100644
index 000000000..680a9842a
--- /dev/null
+++ b/vendor/github.com/prometheus/procfs/buddyinfo.go
@@ -0,0 +1,95 @@
+// Copyright 2017 The Prometheus Authors
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package procfs
+
+import (
+ "bufio"
+ "fmt"
+ "io"
+ "os"
+ "strconv"
+ "strings"
+)
+
+// A BuddyInfo is the details parsed from /proc/buddyinfo.
+// The data is comprised of an array of free fragments of each size.
+// The sizes are 2^n*PAGE_SIZE, where n is the array index.
+type BuddyInfo struct {
+ Node string
+ Zone string
+ Sizes []float64
+}
+
+// NewBuddyInfo reads the buddyinfo statistics.
+func NewBuddyInfo() ([]BuddyInfo, error) {
+ fs, err := NewFS(DefaultMountPoint)
+ if err != nil {
+ return nil, err
+ }
+
+ return fs.NewBuddyInfo()
+}
+
+// NewBuddyInfo reads the buddyinfo statistics from the specified `proc` filesystem.
+func (fs FS) NewBuddyInfo() ([]BuddyInfo, error) {
+ file, err := os.Open(fs.Path("buddyinfo"))
+ if err != nil {
+ return nil, err
+ }
+ defer file.Close()
+
+ return parseBuddyInfo(file)
+}
+
+func parseBuddyInfo(r io.Reader) ([]BuddyInfo, error) {
+ var (
+ buddyInfo = []BuddyInfo{}
+ scanner = bufio.NewScanner(r)
+ bucketCount = -1
+ )
+
+ for scanner.Scan() {
+ var err error
+ line := scanner.Text()
+ parts := strings.Fields(string(line))
+
+ if len(parts) < 4 {
+ return nil, fmt.Errorf("invalid number of fields when parsing buddyinfo")
+ }
+
+ node := strings.TrimRight(parts[1], ",")
+ zone := strings.TrimRight(parts[3], ",")
+ arraySize := len(parts[4:])
+
+ if bucketCount == -1 {
+ bucketCount = arraySize
+ } else {
+ if bucketCount != arraySize {
+ return nil, fmt.Errorf("mismatch in number of buddyinfo buckets, previous count %d, new count %d", bucketCount, arraySize)
+ }
+ }
+
+ sizes := make([]float64, arraySize)
+ for i := 0; i < arraySize; i++ {
+ sizes[i], err = strconv.ParseFloat(parts[i+4], 64)
+ if err != nil {
+ return nil, fmt.Errorf("invalid value in buddyinfo: %s", err)
+ }
+ }
+
+ buddyInfo = append(buddyInfo, BuddyInfo{node, zone, sizes})
+ }
+
+ return buddyInfo, scanner.Err()
+}
diff --git a/vendor/github.com/prometheus/procfs/buddyinfo_test.go b/vendor/github.com/prometheus/procfs/buddyinfo_test.go
new file mode 100644
index 000000000..bcf9355ca
--- /dev/null
+++ b/vendor/github.com/prometheus/procfs/buddyinfo_test.go
@@ -0,0 +1,64 @@
+// Copyright 2017 The Prometheus Authors
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package procfs
+
+import (
+ "strings"
+ "testing"
+)
+
+func TestBuddyInfo(t *testing.T) {
+ buddyInfo, err := FS("fixtures/buddyinfo/valid").NewBuddyInfo()
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ if want, got := "DMA", buddyInfo[0].Zone; want != got {
+ t.Errorf("want Node 0, Zone %s, got %s", want, got)
+ }
+
+ if want, got := "Normal", buddyInfo[2].Zone; want != got {
+ t.Errorf("want Node 0, Zone %s, got %s", want, got)
+ }
+
+ if want, got := 4381.0, buddyInfo[2].Sizes[0]; want != got {
+ t.Errorf("want Node 0, Zone Normal %f, got %f", want, got)
+ }
+
+ if want, got := 572.0, buddyInfo[1].Sizes[1]; want != got {
+ t.Errorf("want Node 0, Zone DMA32 %f, got %f", want, got)
+ }
+}
+
+func TestBuddyInfoShort(t *testing.T) {
+ _, err := FS("fixtures/buddyinfo/short").NewBuddyInfo()
+ if err == nil {
+ t.Errorf("expected error, but none occurred")
+ }
+
+ if want, got := "invalid number of fields when parsing buddyinfo", err.Error(); want != got {
+ t.Errorf("wrong error returned, wanted %q, got %q", want, got)
+ }
+}
+
+func TestBuddyInfoSizeMismatch(t *testing.T) {
+ _, err := FS("fixtures/buddyinfo/sizemismatch").NewBuddyInfo()
+ if err == nil {
+ t.Errorf("expected error, but none occurred")
+ }
+
+ if want, got := "mismatch in number of buddyinfo buckets", err.Error(); !strings.HasPrefix(got, want) {
+ t.Errorf("wrong error returned, wanted prefix %q, got %q", want, got)
+ }
+}
diff --git a/vendor/github.com/prometheus/procfs/fixtures/buddyinfo/short/buddyinfo b/vendor/github.com/prometheus/procfs/fixtures/buddyinfo/short/buddyinfo
new file mode 100644
index 000000000..40e71ca35
--- /dev/null
+++ b/vendor/github.com/prometheus/procfs/fixtures/buddyinfo/short/buddyinfo
@@ -0,0 +1,3 @@
+Node 0, zone
+Node 0, zone
+Node 0, zone
diff --git a/vendor/github.com/prometheus/procfs/fixtures/buddyinfo/sizemismatch/buddyinfo b/vendor/github.com/prometheus/procfs/fixtures/buddyinfo/sizemismatch/buddyinfo
new file mode 100644
index 000000000..945636182
--- /dev/null
+++ b/vendor/github.com/prometheus/procfs/fixtures/buddyinfo/sizemismatch/buddyinfo
@@ -0,0 +1,3 @@
+Node 0, zone DMA 1 0 1 0 2 1 1 0 1 1 3
+Node 0, zone DMA32 759 572 791 475 194 45 12 0 0 0 0 0
+Node 0, zone Normal 4381 1093 185 1530 567 102 4 0 0 0
diff --git a/vendor/github.com/prometheus/procfs/fixtures/buddyinfo/valid/buddyinfo b/vendor/github.com/prometheus/procfs/fixtures/buddyinfo/valid/buddyinfo
new file mode 100644
index 000000000..f90594a81
--- /dev/null
+++ b/vendor/github.com/prometheus/procfs/fixtures/buddyinfo/valid/buddyinfo
@@ -0,0 +1,3 @@
+Node 0, zone DMA 1 0 1 0 2 1 1 0 1 1 3
+Node 0, zone DMA32 759 572 791 475 194 45 12 0 0 0 0
+Node 0, zone Normal 4381 1093 185 1530 567 102 4 0 0 0 0
diff --git a/vendor/github.com/prometheus/procfs/fixtures/fs/xfs/stat b/vendor/github.com/prometheus/procfs/fixtures/fs/xfs/stat
new file mode 100644
index 000000000..f7ca7f940
--- /dev/null
+++ b/vendor/github.com/prometheus/procfs/fixtures/fs/xfs/stat
@@ -0,0 +1,23 @@
+extent_alloc 92447 97589 92448 93751
+abt 0 0 0 0
+blk_map 1767055 188820 184891 92447 92448 2140766 0
+bmbt 0 0 0 0
+dir 185039 92447 92444 136422
+trans 706 944304 0
+ig 185045 58807 0 126238 0 33637 22
+log 2883 113448 9 17360 739
+push_ail 945014 0 134260 15483 0 3940 464 159985 0 40
+xstrat 92447 0
+rw 107739 94045
+attr 4 0 0 0
+icluster 8677 7849 135802
+vnodes 92601 0 0 0 92444 92444 92444 0
+buf 2666287 7122 2659202 3599 2 7085 0 10297 7085
+abtb2 184941 1277345 13257 13278 0 0 0 0 0 0 0 0 0 0 2746147
+abtc2 345295 2416764 172637 172658 0 0 0 0 0 0 0 0 0 0 21406023
+bmbt2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ibt2 343004 1358467 0 0 0 0 0 0 0 0 0 0 0 0 0
+fibt2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+qm 0 0 0 0 0 0 0 0
+xpc 399724544 92823103 86219234
+debug 0
diff --git a/vendor/github.com/prometheus/procfs/fs.go b/vendor/github.com/prometheus/procfs/fs.go
index 49aaab050..17546756b 100644
--- a/vendor/github.com/prometheus/procfs/fs.go
+++ b/vendor/github.com/prometheus/procfs/fs.go
@@ -4,6 +4,8 @@ import (
"fmt"
"os"
"path"
+
+ "github.com/prometheus/procfs/xfs"
)
// FS represents the pseudo-filesystem proc, which provides an interface to
@@ -31,3 +33,14 @@ func NewFS(mountPoint string) (FS, error) {
func (fs FS) Path(p ...string) string {
return path.Join(append([]string{string(fs)}, p...)...)
}
+
+// XFSStats retrieves XFS filesystem runtime statistics.
+func (fs FS) XFSStats() (*xfs.Stats, error) {
+ f, err := os.Open(fs.Path("fs/xfs/stat"))
+ if err != nil {
+ return nil, err
+ }
+ defer f.Close()
+
+ return xfs.ParseStats(f)
+}
diff --git a/vendor/github.com/prometheus/procfs/fs_test.go b/vendor/github.com/prometheus/procfs/fs_test.go
index 91f1c6c97..e492cde55 100644
--- a/vendor/github.com/prometheus/procfs/fs_test.go
+++ b/vendor/github.com/prometheus/procfs/fs_test.go
@@ -11,3 +11,16 @@ func TestNewFS(t *testing.T) {
t.Error("want NewFS to fail if mount point is not a directory")
}
}
+
+func TestFSXFSStats(t *testing.T) {
+ stats, err := FS("fixtures").XFSStats()
+ if err != nil {
+ t.Fatalf("failed to parse XFS stats: %v", err)
+ }
+
+ // Very lightweight test just to sanity check the path used
+ // to open XFS stats. Heavier tests in package xfs.
+ if want, got := uint32(92447), stats.ExtentAllocation.ExtentsAllocated; want != got {
+ t.Errorf("unexpected extents allocated:\nwant: %d\nhave: %d", want, got)
+ }
+}
diff --git a/vendor/github.com/prometheus/procfs/ipvs_test.go b/vendor/github.com/prometheus/procfs/ipvs_test.go
index c836c23ac..796ee5b88 100644
--- a/vendor/github.com/prometheus/procfs/ipvs_test.go
+++ b/vendor/github.com/prometheus/procfs/ipvs_test.go
@@ -14,7 +14,7 @@ var (
OutgoingBytes: 0,
}
expectedIPVSBackendStatuses = []IPVSBackendStatus{
- IPVSBackendStatus{
+ {
LocalAddress: net.ParseIP("192.168.0.22"),
LocalPort: 3306,
RemoteAddress: net.ParseIP("192.168.82.22"),
@@ -24,7 +24,7 @@ var (
ActiveConn: 248,
InactConn: 2,
},
- IPVSBackendStatus{
+ {
LocalAddress: net.ParseIP("192.168.0.22"),
LocalPort: 3306,
RemoteAddress: net.ParseIP("192.168.83.24"),
@@ -34,7 +34,7 @@ var (
ActiveConn: 248,
InactConn: 2,
},
- IPVSBackendStatus{
+ {
LocalAddress: net.ParseIP("192.168.0.22"),
LocalPort: 3306,
RemoteAddress: net.ParseIP("192.168.83.21"),
@@ -44,7 +44,7 @@ var (
ActiveConn: 248,
InactConn: 1,
},
- IPVSBackendStatus{
+ {
LocalAddress: net.ParseIP("192.168.0.57"),
LocalPort: 3306,
RemoteAddress: net.ParseIP("192.168.84.22"),
@@ -54,7 +54,7 @@ var (
ActiveConn: 0,
InactConn: 0,
},
- IPVSBackendStatus{
+ {
LocalAddress: net.ParseIP("192.168.0.57"),
LocalPort: 3306,
RemoteAddress: net.ParseIP("192.168.82.21"),
@@ -64,7 +64,7 @@ var (
ActiveConn: 1499,
InactConn: 0,
},
- IPVSBackendStatus{
+ {
LocalAddress: net.ParseIP("192.168.0.57"),
LocalPort: 3306,
RemoteAddress: net.ParseIP("192.168.50.21"),
@@ -74,7 +74,7 @@ var (
ActiveConn: 1498,
InactConn: 0,
},
- IPVSBackendStatus{
+ {
LocalAddress: net.ParseIP("192.168.0.55"),
LocalPort: 3306,
RemoteAddress: net.ParseIP("192.168.50.26"),
@@ -84,7 +84,7 @@ var (
ActiveConn: 0,
InactConn: 0,
},
- IPVSBackendStatus{
+ {
LocalAddress: net.ParseIP("192.168.0.55"),
LocalPort: 3306,
RemoteAddress: net.ParseIP("192.168.49.32"),
diff --git a/vendor/github.com/prometheus/procfs/mdstat_test.go b/vendor/github.com/prometheus/procfs/mdstat_test.go
index ca5fe4d1b..fa463c2fb 100644
--- a/vendor/github.com/prometheus/procfs/mdstat_test.go
+++ b/vendor/github.com/prometheus/procfs/mdstat_test.go
@@ -11,13 +11,13 @@ func TestMDStat(t *testing.T) {
}
refs := map[string]MDStat{
- "md3": MDStat{"md3", "active", 8, 8, 5853468288, 5853468288},
- "md127": MDStat{"md127", "active", 2, 2, 312319552, 312319552},
- "md0": MDStat{"md0", "active", 2, 2, 248896, 248896},
- "md4": MDStat{"md4", "inactive", 2, 2, 4883648, 4883648},
- "md6": MDStat{"md6", "active", 1, 2, 195310144, 16775552},
- "md8": MDStat{"md8", "active", 2, 2, 195310144, 16775552},
- "md7": MDStat{"md7", "active", 3, 4, 7813735424, 7813735424},
+ "md3": {"md3", "active", 8, 8, 5853468288, 5853468288},
+ "md127": {"md127", "active", 2, 2, 312319552, 312319552},
+ "md0": {"md0", "active", 2, 2, 248896, 248896},
+ "md4": {"md4", "inactive", 2, 2, 4883648, 4883648},
+ "md6": {"md6", "active", 1, 2, 195310144, 16775552},
+ "md8": {"md8", "active", 2, 2, 195310144, 16775552},
+ "md7": {"md7", "active", 3, 4, 7813735424, 7813735424},
}
if want, have := len(refs), len(mdStates); want != have {
diff --git a/vendor/github.com/prometheus/procfs/mountstats.go b/vendor/github.com/prometheus/procfs/mountstats.go
index 47ab0a744..fe8f1f6a2 100644
--- a/vendor/github.com/prometheus/procfs/mountstats.go
+++ b/vendor/github.com/prometheus/procfs/mountstats.go
@@ -123,7 +123,7 @@ type NFSEventsStats struct {
VFSFlush uint64
// Number of times fsync() has been called on directories and files.
VFSFsync uint64
- // Number of times locking has been attemped on a file.
+ // Number of times locking has been attempted on a file.
VFSLock uint64
// Number of times files have been closed and released.
VFSFileRelease uint64
@@ -356,7 +356,7 @@ func parseMountStatsNFS(s *bufio.Scanner, statVersion string) (*MountStatsNFS, e
}
// When encountering "per-operation statistics", we must break this
- // loop and parse them seperately to ensure we can terminate parsing
+ // loop and parse them separately to ensure we can terminate parsing
// before reaching another device entry; hence why this 'if' statement
// is not just another switch case
if ss[0] == fieldPerOpStats {
diff --git a/vendor/github.com/prometheus/procfs/mountstats_test.go b/vendor/github.com/prometheus/procfs/mountstats_test.go
index e65707939..75fd4a0f1 100644
--- a/vendor/github.com/prometheus/procfs/mountstats_test.go
+++ b/vendor/github.com/prometheus/procfs/mountstats_test.go
@@ -12,7 +12,6 @@ func TestMountStats(t *testing.T) {
tests := []struct {
name string
s string
- fs bool
mounts []*Mount
invalid bool
}{
@@ -113,7 +112,6 @@ func TestMountStats(t *testing.T) {
},
{
name: "fixtures OK",
- fs: true,
mounts: []*Mount{
{
Device: "rootfs",
@@ -201,10 +199,9 @@ func TestMountStats(t *testing.T) {
if tt.s != "" {
mounts, err = parseMountStats(strings.NewReader(tt.s))
- }
- if tt.fs {
- proc, err := FS("fixtures").NewProc(26231)
- if err != nil {
+ } else {
+ proc, e := FS("fixtures").NewProc(26231)
+ if e != nil {
t.Fatalf("failed to create proc: %v", err)
}
diff --git a/vendor/github.com/prometheus/procfs/xfs/parse.go b/vendor/github.com/prometheus/procfs/xfs/parse.go
new file mode 100644
index 000000000..d1285fa6c
--- /dev/null
+++ b/vendor/github.com/prometheus/procfs/xfs/parse.go
@@ -0,0 +1,361 @@
+// Copyright 2017 The Prometheus Authors
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package xfs
+
+import (
+ "bufio"
+ "fmt"
+ "io"
+ "log"
+ "strconv"
+ "strings"
+)
+
+// ParseStats parses a Stats from an input io.Reader, using the format
+// found in /proc/fs/xfs/stat.
+func ParseStats(r io.Reader) (*Stats, error) {
+ const (
+ // Fields parsed into stats structures.
+ fieldExtentAlloc = "extent_alloc"
+ fieldAbt = "abt"
+ fieldBlkMap = "blk_map"
+ fieldBmbt = "bmbt"
+ fieldDir = "dir"
+ fieldTrans = "trans"
+ fieldIg = "ig"
+ fieldLog = "log"
+ fieldRw = "rw"
+ fieldAttr = "attr"
+ fieldIcluster = "icluster"
+ fieldVnodes = "vnodes"
+ fieldBuf = "buf"
+ fieldXpc = "xpc"
+
+ // Unimplemented at this time due to lack of documentation.
+ fieldPushAil = "push_ail"
+ fieldXstrat = "xstrat"
+ fieldAbtb2 = "abtb2"
+ fieldAbtc2 = "abtc2"
+ fieldBmbt2 = "bmbt2"
+ fieldIbt2 = "ibt2"
+ fieldFibt2 = "fibt2"
+ fieldQm = "qm"
+ fieldDebug = "debug"
+ )
+
+ var xfss Stats
+
+ s := bufio.NewScanner(r)
+ for s.Scan() {
+ // Expect at least a string label and a single integer value, ex:
+ // - abt 0
+ // - rw 1 2
+ ss := strings.Fields(string(s.Bytes()))
+ if len(ss) < 2 {
+ continue
+ }
+ label := ss[0]
+
+ // Extended precision counters are uint64 values.
+ if label == fieldXpc {
+ us, err := parseUint64s(ss[1:])
+ if err != nil {
+ return nil, err
+ }
+
+ xfss.ExtendedPrecision, err = extendedPrecisionStats(us)
+ if err != nil {
+ return nil, err
+ }
+
+ continue
+ }
+
+ // All other counters are uint32 values.
+ us, err := parseUint32s(ss[1:])
+ if err != nil {
+ return nil, err
+ }
+
+ switch label {
+ case fieldExtentAlloc:
+ xfss.ExtentAllocation, err = extentAllocationStats(us)
+ case fieldAbt:
+ xfss.AllocationBTree, err = btreeStats(us)
+ case fieldBlkMap:
+ xfss.BlockMapping, err = blockMappingStats(us)
+ case fieldBmbt:
+ xfss.BlockMapBTree, err = btreeStats(us)
+ case fieldDir:
+ xfss.DirectoryOperation, err = directoryOperationStats(us)
+ case fieldTrans:
+ xfss.Transaction, err = transactionStats(us)
+ case fieldIg:
+ xfss.InodeOperation, err = inodeOperationStats(us)
+ case fieldLog:
+ xfss.LogOperation, err = logOperationStats(us)
+ case fieldRw:
+ xfss.ReadWrite, err = readWriteStats(us)
+ case fieldAttr:
+ xfss.AttributeOperation, err = attributeOperationStats(us)
+ case fieldIcluster:
+ xfss.InodeClustering, err = inodeClusteringStats(us)
+ case fieldVnodes:
+ xfss.Vnode, err = vnodeStats(us)
+ case fieldBuf:
+ xfss.Buffer, err = bufferStats(us)
+ }
+ if err != nil {
+ return nil, err
+ }
+ }
+
+ return &xfss, s.Err()
+}
+
+// extentAllocationStats builds an ExtentAllocationStats from a slice of uint32s.
+func extentAllocationStats(us []uint32) (ExtentAllocationStats, error) {
+ if l := len(us); l != 4 {
+ return ExtentAllocationStats{}, fmt.Errorf("incorrect number of values for XFS extent allocation stats: %d", l)
+ }
+
+ return ExtentAllocationStats{
+ ExtentsAllocated: us[0],
+ BlocksAllocated: us[1],
+ ExtentsFreed: us[2],
+ BlocksFreed: us[3],
+ }, nil
+}
+
+// btreeStats builds a BTreeStats from a slice of uint32s.
+func btreeStats(us []uint32) (BTreeStats, error) {
+ if l := len(us); l != 4 {
+ return BTreeStats{}, fmt.Errorf("incorrect number of values for XFS btree stats: %d", l)
+ }
+
+ return BTreeStats{
+ Lookups: us[0],
+ Compares: us[1],
+ RecordsInserted: us[2],
+ RecordsDeleted: us[3],
+ }, nil
+}
+
+// BlockMappingStat builds a BlockMappingStats from a slice of uint32s.
+func blockMappingStats(us []uint32) (BlockMappingStats, error) {
+ if l := len(us); l != 7 {
+ return BlockMappingStats{}, fmt.Errorf("incorrect number of values for XFS block mapping stats: %d", l)
+ }
+
+ return BlockMappingStats{
+ Reads: us[0],
+ Writes: us[1],
+ Unmaps: us[2],
+ ExtentListInsertions: us[3],
+ ExtentListDeletions: us[4],
+ ExtentListLookups: us[5],
+ ExtentListCompares: us[6],
+ }, nil
+}
+
+// DirectoryOperationStats builds a DirectoryOperationStats from a slice of uint32s.
+func directoryOperationStats(us []uint32) (DirectoryOperationStats, error) {
+ if l := len(us); l != 4 {
+ return DirectoryOperationStats{}, fmt.Errorf("incorrect number of values for XFS directory operation stats: %d", l)
+ }
+
+ return DirectoryOperationStats{
+ Lookups: us[0],
+ Creates: us[1],
+ Removes: us[2],
+ Getdents: us[3],
+ }, nil
+}
+
+// TransactionStats builds a TransactionStats from a slice of uint32s.
+func transactionStats(us []uint32) (TransactionStats, error) {
+ if l := len(us); l != 3 {
+ return TransactionStats{}, fmt.Errorf("incorrect number of values for XFS transaction stats: %d", l)
+ }
+
+ return TransactionStats{
+ Sync: us[0],
+ Async: us[1],
+ Empty: us[2],
+ }, nil
+}
+
+// InodeOperationStats builds an InodeOperationStats from a slice of uint32s.
+func inodeOperationStats(us []uint32) (InodeOperationStats, error) {
+ if l := len(us); l != 7 {
+ return InodeOperationStats{}, fmt.Errorf("incorrect number of values for XFS inode operation stats: %d", l)
+ }
+
+ return InodeOperationStats{
+ Attempts: us[0],
+ Found: us[1],
+ Recycle: us[2],
+ Missed: us[3],
+ Duplicate: us[4],
+ Reclaims: us[5],
+ AttributeChange: us[6],
+ }, nil
+}
+
+// LogOperationStats builds a LogOperationStats from a slice of uint32s.
+func logOperationStats(us []uint32) (LogOperationStats, error) {
+ if l := len(us); l != 5 {
+ return LogOperationStats{}, fmt.Errorf("incorrect number of values for XFS log operation stats: %d", l)
+ }
+
+ return LogOperationStats{
+ Writes: us[0],
+ Blocks: us[1],
+ NoInternalBuffers: us[2],
+ Force: us[3],
+ ForceSleep: us[4],
+ }, nil
+}
+
+// ReadWriteStats builds a ReadWriteStats from a slice of uint32s.
+func readWriteStats(us []uint32) (ReadWriteStats, error) {
+ if l := len(us); l != 2 {
+ return ReadWriteStats{}, fmt.Errorf("incorrect number of values for XFS read write stats: %d", l)
+ }
+
+ return ReadWriteStats{
+ Read: us[0],
+ Write: us[1],
+ }, nil
+}
+
+// AttributeOperationStats builds an AttributeOperationStats from a slice of uint32s.
+func attributeOperationStats(us []uint32) (AttributeOperationStats, error) {
+ if l := len(us); l != 4 {
+ return AttributeOperationStats{}, fmt.Errorf("incorrect number of values for XFS attribute operation stats: %d", l)
+ }
+
+ return AttributeOperationStats{
+ Get: us[0],
+ Set: us[1],
+ Remove: us[2],
+ List: us[3],
+ }, nil
+}
+
+// InodeClusteringStats builds an InodeClusteringStats from a slice of uint32s.
+func inodeClusteringStats(us []uint32) (InodeClusteringStats, error) {
+ if l := len(us); l != 3 {
+ return InodeClusteringStats{}, fmt.Errorf("incorrect number of values for XFS inode clustering stats: %d", l)
+ }
+
+ return InodeClusteringStats{
+ Iflush: us[0],
+ Flush: us[1],
+ FlushInode: us[2],
+ }, nil
+}
+
+// VnodeStats builds a VnodeStats from a slice of uint32s.
+func vnodeStats(us []uint32) (VnodeStats, error) {
+ // The attribute "Free" appears to not be available on older XFS
+ // stats versions. Therefore, 7 or 8 elements may appear in
+ // this slice.
+ l := len(us)
+ log.Println(l)
+ if l != 7 && l != 8 {
+ return VnodeStats{}, fmt.Errorf("incorrect number of values for XFS vnode stats: %d", l)
+ }
+
+ s := VnodeStats{
+ Active: us[0],
+ Allocate: us[1],
+ Get: us[2],
+ Hold: us[3],
+ Release: us[4],
+ Reclaim: us[5],
+ Remove: us[6],
+ }
+
+ // Skip adding free, unless it is present. The zero value will
+ // be used in place of an actual count.
+ if l == 7 {
+ return s, nil
+ }
+
+ s.Free = us[7]
+ return s, nil
+}
+
+// BufferStats builds a BufferStats from a slice of uint32s.
+func bufferStats(us []uint32) (BufferStats, error) {
+ if l := len(us); l != 9 {
+ return BufferStats{}, fmt.Errorf("incorrect number of values for XFS buffer stats: %d", l)
+ }
+
+ return BufferStats{
+ Get: us[0],
+ Create: us[1],
+ GetLocked: us[2],
+ GetLockedWaited: us[3],
+ BusyLocked: us[4],
+ MissLocked: us[5],
+ PageRetries: us[6],
+ PageFound: us[7],
+ GetRead: us[8],
+ }, nil
+}
+
+// ExtendedPrecisionStats builds an ExtendedPrecisionStats from a slice of uint32s.
+func extendedPrecisionStats(us []uint64) (ExtendedPrecisionStats, error) {
+ if l := len(us); l != 3 {
+ return ExtendedPrecisionStats{}, fmt.Errorf("incorrect number of values for XFS extended precision stats: %d", l)
+ }
+
+ return ExtendedPrecisionStats{
+ FlushBytes: us[0],
+ WriteBytes: us[1],
+ ReadBytes: us[2],
+ }, nil
+}
+
+// parseUint32s parses a slice of strings into a slice of uint32s.
+func parseUint32s(ss []string) ([]uint32, error) {
+ us := make([]uint32, 0, len(ss))
+ for _, s := range ss {
+ u, err := strconv.ParseUint(s, 10, 32)
+ if err != nil {
+ return nil, err
+ }
+
+ us = append(us, uint32(u))
+ }
+
+ return us, nil
+}
+
+// parseUint64s parses a slice of strings into a slice of uint64s.
+func parseUint64s(ss []string) ([]uint64, error) {
+ us := make([]uint64, 0, len(ss))
+ for _, s := range ss {
+ u, err := strconv.ParseUint(s, 10, 64)
+ if err != nil {
+ return nil, err
+ }
+
+ us = append(us, u)
+ }
+
+ return us, nil
+}
diff --git a/vendor/github.com/prometheus/procfs/xfs/parse_test.go b/vendor/github.com/prometheus/procfs/xfs/parse_test.go
new file mode 100644
index 000000000..11ddb7425
--- /dev/null
+++ b/vendor/github.com/prometheus/procfs/xfs/parse_test.go
@@ -0,0 +1,446 @@
+// Copyright 2017 The Prometheus Authors
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package xfs_test
+
+import (
+ "log"
+ "reflect"
+ "strings"
+ "testing"
+
+ "github.com/prometheus/procfs"
+ "github.com/prometheus/procfs/xfs"
+)
+
+func TestParseStats(t *testing.T) {
+ tests := []struct {
+ name string
+ s string
+ fs bool
+ stats *xfs.Stats
+ invalid bool
+ }{
+ {
+ name: "empty file OK",
+ },
+ {
+ name: "short or empty lines and unknown labels ignored",
+ s: "one\n\ntwo 1 2 3\n",
+ stats: &xfs.Stats{},
+ },
+ {
+ name: "bad uint32",
+ s: "extent_alloc XXX",
+ invalid: true,
+ },
+ {
+ name: "bad uint64",
+ s: "xpc XXX",
+ invalid: true,
+ },
+ {
+ name: "extent_alloc bad",
+ s: "extent_alloc 1",
+ invalid: true,
+ },
+ {
+ name: "extent_alloc OK",
+ s: "extent_alloc 1 2 3 4",
+ stats: &xfs.Stats{
+ ExtentAllocation: xfs.ExtentAllocationStats{
+ ExtentsAllocated: 1,
+ BlocksAllocated: 2,
+ ExtentsFreed: 3,
+ BlocksFreed: 4,
+ },
+ },
+ },
+ {
+ name: "abt bad",
+ s: "abt 1",
+ invalid: true,
+ },
+ {
+ name: "abt OK",
+ s: "abt 1 2 3 4",
+ stats: &xfs.Stats{
+ AllocationBTree: xfs.BTreeStats{
+ Lookups: 1,
+ Compares: 2,
+ RecordsInserted: 3,
+ RecordsDeleted: 4,
+ },
+ },
+ },
+ {
+ name: "blk_map bad",
+ s: "blk_map 1",
+ invalid: true,
+ },
+ {
+ name: "blk_map OK",
+ s: "blk_map 1 2 3 4 5 6 7",
+ stats: &xfs.Stats{
+ BlockMapping: xfs.BlockMappingStats{
+ Reads: 1,
+ Writes: 2,
+ Unmaps: 3,
+ ExtentListInsertions: 4,
+ ExtentListDeletions: 5,
+ ExtentListLookups: 6,
+ ExtentListCompares: 7,
+ },
+ },
+ },
+ {
+ name: "bmbt bad",
+ s: "bmbt 1",
+ invalid: true,
+ },
+ {
+ name: "bmbt OK",
+ s: "bmbt 1 2 3 4",
+ stats: &xfs.Stats{
+ BlockMapBTree: xfs.BTreeStats{
+ Lookups: 1,
+ Compares: 2,
+ RecordsInserted: 3,
+ RecordsDeleted: 4,
+ },
+ },
+ },
+ {
+ name: "dir bad",
+ s: "dir 1",
+ invalid: true,
+ },
+ {
+ name: "dir OK",
+ s: "dir 1 2 3 4",
+ stats: &xfs.Stats{
+ DirectoryOperation: xfs.DirectoryOperationStats{
+ Lookups: 1,
+ Creates: 2,
+ Removes: 3,
+ Getdents: 4,
+ },
+ },
+ },
+ {
+ name: "trans bad",
+ s: "trans 1",
+ invalid: true,
+ },
+ {
+ name: "trans OK",
+ s: "trans 1 2 3",
+ stats: &xfs.Stats{
+ Transaction: xfs.TransactionStats{
+ Sync: 1,
+ Async: 2,
+ Empty: 3,
+ },
+ },
+ },
+ {
+ name: "ig bad",
+ s: "ig 1",
+ invalid: true,
+ },
+ {
+ name: "ig OK",
+ s: "ig 1 2 3 4 5 6 7",
+ stats: &xfs.Stats{
+ InodeOperation: xfs.InodeOperationStats{
+ Attempts: 1,
+ Found: 2,
+ Recycle: 3,
+ Missed: 4,
+ Duplicate: 5,
+ Reclaims: 6,
+ AttributeChange: 7,
+ },
+ },
+ },
+ {
+ name: "log bad",
+ s: "log 1",
+ invalid: true,
+ },
+ {
+ name: "log OK",
+ s: "log 1 2 3 4 5",
+ stats: &xfs.Stats{
+ LogOperation: xfs.LogOperationStats{
+ Writes: 1,
+ Blocks: 2,
+ NoInternalBuffers: 3,
+ Force: 4,
+ ForceSleep: 5,
+ },
+ },
+ },
+ {
+ name: "rw bad",
+ s: "rw 1",
+ invalid: true,
+ },
+ {
+ name: "rw OK",
+ s: "rw 1 2",
+ stats: &xfs.Stats{
+ ReadWrite: xfs.ReadWriteStats{
+ Read: 1,
+ Write: 2,
+ },
+ },
+ },
+ {
+ name: "attr bad",
+ s: "attr 1",
+ invalid: true,
+ },
+ {
+ name: "attr OK",
+ s: "attr 1 2 3 4",
+ stats: &xfs.Stats{
+ AttributeOperation: xfs.AttributeOperationStats{
+ Get: 1,
+ Set: 2,
+ Remove: 3,
+ List: 4,
+ },
+ },
+ },
+ {
+ name: "icluster bad",
+ s: "icluster 1",
+ invalid: true,
+ },
+ {
+ name: "icluster OK",
+ s: "icluster 1 2 3",
+ stats: &xfs.Stats{
+ InodeClustering: xfs.InodeClusteringStats{
+ Iflush: 1,
+ Flush: 2,
+ FlushInode: 3,
+ },
+ },
+ },
+ {
+ name: "vnodes bad",
+ s: "vnodes 1",
+ invalid: true,
+ },
+ {
+ name: "vnodes (missing free) OK",
+ s: "vnodes 1 2 3 4 5 6 7",
+ stats: &xfs.Stats{
+ Vnode: xfs.VnodeStats{
+ Active: 1,
+ Allocate: 2,
+ Get: 3,
+ Hold: 4,
+ Release: 5,
+ Reclaim: 6,
+ Remove: 7,
+ },
+ },
+ },
+ {
+ name: "vnodes (with free) OK",
+ s: "vnodes 1 2 3 4 5 6 7 8",
+ stats: &xfs.Stats{
+ Vnode: xfs.VnodeStats{
+ Active: 1,
+ Allocate: 2,
+ Get: 3,
+ Hold: 4,
+ Release: 5,
+ Reclaim: 6,
+ Remove: 7,
+ Free: 8,
+ },
+ },
+ },
+ {
+ name: "buf bad",
+ s: "buf 1",
+ invalid: true,
+ },
+ {
+ name: "buf OK",
+ s: "buf 1 2 3 4 5 6 7 8 9",
+ stats: &xfs.Stats{
+ Buffer: xfs.BufferStats{
+ Get: 1,
+ Create: 2,
+ GetLocked: 3,
+ GetLockedWaited: 4,
+ BusyLocked: 5,
+ MissLocked: 6,
+ PageRetries: 7,
+ PageFound: 8,
+ GetRead: 9,
+ },
+ },
+ },
+ {
+ name: "xpc bad",
+ s: "xpc 1",
+ invalid: true,
+ },
+ {
+ name: "xpc OK",
+ s: "xpc 1 2 3",
+ stats: &xfs.Stats{
+ ExtendedPrecision: xfs.ExtendedPrecisionStats{
+ FlushBytes: 1,
+ WriteBytes: 2,
+ ReadBytes: 3,
+ },
+ },
+ },
+ {
+ name: "fixtures OK",
+ fs: true,
+ stats: &xfs.Stats{
+ ExtentAllocation: xfs.ExtentAllocationStats{
+ ExtentsAllocated: 92447,
+ BlocksAllocated: 97589,
+ ExtentsFreed: 92448,
+ BlocksFreed: 93751,
+ },
+ AllocationBTree: xfs.BTreeStats{
+ Lookups: 0,
+ Compares: 0,
+ RecordsInserted: 0,
+ RecordsDeleted: 0,
+ },
+ BlockMapping: xfs.BlockMappingStats{
+ Reads: 1767055,
+ Writes: 188820,
+ Unmaps: 184891,
+ ExtentListInsertions: 92447,
+ ExtentListDeletions: 92448,
+ ExtentListLookups: 2140766,
+ ExtentListCompares: 0,
+ },
+ BlockMapBTree: xfs.BTreeStats{
+ Lookups: 0,
+ Compares: 0,
+ RecordsInserted: 0,
+ RecordsDeleted: 0,
+ },
+ DirectoryOperation: xfs.DirectoryOperationStats{
+ Lookups: 185039,
+ Creates: 92447,
+ Removes: 92444,
+ Getdents: 136422,
+ },
+ Transaction: xfs.TransactionStats{
+ Sync: 706,
+ Async: 944304,
+ Empty: 0,
+ },
+ InodeOperation: xfs.InodeOperationStats{
+ Attempts: 185045,
+ Found: 58807,
+ Recycle: 0,
+ Missed: 126238,
+ Duplicate: 0,
+ Reclaims: 33637,
+ AttributeChange: 22,
+ },
+ LogOperation: xfs.LogOperationStats{
+ Writes: 2883,
+ Blocks: 113448,
+ NoInternalBuffers: 9,
+ Force: 17360,
+ ForceSleep: 739,
+ },
+ ReadWrite: xfs.ReadWriteStats{
+ Read: 107739,
+ Write: 94045,
+ },
+ AttributeOperation: xfs.AttributeOperationStats{
+ Get: 4,
+ Set: 0,
+ Remove: 0,
+ List: 0,
+ },
+ InodeClustering: xfs.InodeClusteringStats{
+ Iflush: 8677,
+ Flush: 7849,
+ FlushInode: 135802,
+ },
+ Vnode: xfs.VnodeStats{
+ Active: 92601,
+ Allocate: 0,
+ Get: 0,
+ Hold: 0,
+ Release: 92444,
+ Reclaim: 92444,
+ Remove: 92444,
+ Free: 0,
+ },
+ Buffer: xfs.BufferStats{
+ Get: 2666287,
+ Create: 7122,
+ GetLocked: 2659202,
+ GetLockedWaited: 3599,
+ BusyLocked: 2,
+ MissLocked: 7085,
+ PageRetries: 0,
+ PageFound: 10297,
+ GetRead: 7085,
+ },
+ ExtendedPrecision: xfs.ExtendedPrecisionStats{
+ FlushBytes: 399724544,
+ WriteBytes: 92823103,
+ ReadBytes: 86219234,
+ },
+ },
+ },
+ }
+
+ for i, tt := range tests {
+ t.Logf("[%02d] test %q", i, tt.name)
+
+ var (
+ stats *xfs.Stats
+ err error
+ )
+
+ if tt.s != "" {
+ stats, err = xfs.ParseStats(strings.NewReader(tt.s))
+ }
+ if tt.fs {
+ stats, err = procfs.FS("../fixtures").XFSStats()
+ }
+
+ if tt.invalid && err == nil {
+ t.Error("expected an error, but none occurred")
+ }
+ if !tt.invalid && err != nil {
+ t.Errorf("unexpected error: %v", err)
+ }
+
+ if want, have := tt.stats, stats; !reflect.DeepEqual(want, have) {
+ log.Printf("stats: %#v", have)
+ t.Errorf("unexpected XFS stats:\nwant:\n%v\nhave:\n%v", want, have)
+ }
+ }
+}
diff --git a/vendor/github.com/prometheus/procfs/xfs/xfs.go b/vendor/github.com/prometheus/procfs/xfs/xfs.go
new file mode 100644
index 000000000..ed77d907a
--- /dev/null
+++ b/vendor/github.com/prometheus/procfs/xfs/xfs.go
@@ -0,0 +1,158 @@
+// Copyright 2017 The Prometheus Authors
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Package xfs provides access to statistics exposed by the XFS filesystem.
+package xfs
+
+// Stats contains XFS filesystem runtime statistics, parsed from
+// /proc/fs/xfs/stat.
+//
+// The names and meanings of each statistic were taken from
+// http://xfs.org/index.php/Runtime_Stats and xfs_stats.h in the Linux
+// kernel source. Most counters are uint32s (same data types used in
+// xfs_stats.h), but some of the "extended precision stats" are uint64s.
+type Stats struct {
+ ExtentAllocation ExtentAllocationStats
+ AllocationBTree BTreeStats
+ BlockMapping BlockMappingStats
+ BlockMapBTree BTreeStats
+ DirectoryOperation DirectoryOperationStats
+ Transaction TransactionStats
+ InodeOperation InodeOperationStats
+ LogOperation LogOperationStats
+ ReadWrite ReadWriteStats
+ AttributeOperation AttributeOperationStats
+ InodeClustering InodeClusteringStats
+ Vnode VnodeStats
+ Buffer BufferStats
+ ExtendedPrecision ExtendedPrecisionStats
+}
+
+// ExtentAllocationStats contains statistics regarding XFS extent allocations.
+type ExtentAllocationStats struct {
+ ExtentsAllocated uint32
+ BlocksAllocated uint32
+ ExtentsFreed uint32
+ BlocksFreed uint32
+}
+
+// BTreeStats contains statistics regarding an XFS internal B-tree.
+type BTreeStats struct {
+ Lookups uint32
+ Compares uint32
+ RecordsInserted uint32
+ RecordsDeleted uint32
+}
+
+// BlockMappingStats contains statistics regarding XFS block maps.
+type BlockMappingStats struct {
+ Reads uint32
+ Writes uint32
+ Unmaps uint32
+ ExtentListInsertions uint32
+ ExtentListDeletions uint32
+ ExtentListLookups uint32
+ ExtentListCompares uint32
+}
+
+// DirectoryOperationStats contains statistics regarding XFS directory entries.
+type DirectoryOperationStats struct {
+ Lookups uint32
+ Creates uint32
+ Removes uint32
+ Getdents uint32
+}
+
+// TransactionStats contains statistics regarding XFS metadata transactions.
+type TransactionStats struct {
+ Sync uint32
+ Async uint32
+ Empty uint32
+}
+
+// InodeOperationStats contains statistics regarding XFS inode operations.
+type InodeOperationStats struct {
+ Attempts uint32
+ Found uint32
+ Recycle uint32
+ Missed uint32
+ Duplicate uint32
+ Reclaims uint32
+ AttributeChange uint32
+}
+
+// LogOperationStats contains statistics regarding the XFS log buffer.
+type LogOperationStats struct {
+ Writes uint32
+ Blocks uint32
+ NoInternalBuffers uint32
+ Force uint32
+ ForceSleep uint32
+}
+
+// ReadWriteStats contains statistics regarding the number of read and write
+// system calls for XFS filesystems.
+type ReadWriteStats struct {
+ Read uint32
+ Write uint32
+}
+
+// AttributeOperationStats contains statistics regarding manipulation of
+// XFS extended file attributes.
+type AttributeOperationStats struct {
+ Get uint32
+ Set uint32
+ Remove uint32
+ List uint32
+}
+
+// InodeClusteringStats contains statistics regarding XFS inode clustering
+// operations.
+type InodeClusteringStats struct {
+ Iflush uint32
+ Flush uint32
+ FlushInode uint32
+}
+
+// VnodeStats contains statistics regarding XFS vnode operations.
+type VnodeStats struct {
+ Active uint32
+ Allocate uint32
+ Get uint32
+ Hold uint32
+ Release uint32
+ Reclaim uint32
+ Remove uint32
+ Free uint32
+}
+
+// BufferStats contains statistics regarding XFS read/write I/O buffers.
+type BufferStats struct {
+ Get uint32
+ Create uint32
+ GetLocked uint32
+ GetLockedWaited uint32
+ BusyLocked uint32
+ MissLocked uint32
+ PageRetries uint32
+ PageFound uint32
+ GetRead uint32
+}
+
+// ExtendedPrecisionStats contains high precision counters used to track the
+// total number of bytes read, written, or flushed, during XFS operations.
+type ExtendedPrecisionStats struct {
+ FlushBytes uint64
+ WriteBytes uint64
+ ReadBytes uint64
+}
diff --git a/vendor/github.com/spf13/cobra/.travis.yml b/vendor/github.com/spf13/cobra/.travis.yml
index bd72adf68..42d1f57d3 100644
--- a/vendor/github.com/spf13/cobra/.travis.yml
+++ b/vendor/github.com/spf13/cobra/.travis.yml
@@ -5,8 +5,9 @@ matrix:
- go: 1.4.3
env: NOVET=true # No bundled vet.
- go: 1.5.4
- - go: 1.6.3
- - go: 1.7
+ - go: 1.6.4
+ - go: 1.7.5
+ - go: 1.8
- go: tip
allow_failures:
- go: tip
diff --git a/vendor/github.com/spf13/cobra/README.md b/vendor/github.com/spf13/cobra/README.md
index 2efda5920..2de984012 100644
--- a/vendor/github.com/spf13/cobra/README.md
+++ b/vendor/github.com/spf13/cobra/README.md
@@ -8,6 +8,7 @@ Many of the most widely used Go projects are built using Cobra including:
* [Hugo](http://gohugo.io)
* [rkt](https://github.com/coreos/rkt)
* [etcd](https://github.com/coreos/etcd)
+* [Docker](https://github.com/docker/docker)
* [Docker (distribution)](https://github.com/docker/distribution)
* [OpenShift](https://www.openshift.com/)
* [Delve](https://github.com/derekparker/delve)
@@ -755,7 +756,7 @@ providing a way to handle the errors in one location. The current list of functi
* PersistentPostRunE
If you would like to silence the default `error` and `usage` output in favor of your own, you can set `SilenceUsage`
-and `SilenceErrors` to `false` on the command. A child command respects these flags if they are set on the parent
+and `SilenceErrors` to `true` on the command. A child command respects these flags if they are set on the parent
command.
**Example Usage using RunE:**
diff --git a/vendor/github.com/spf13/cobra/command.go b/vendor/github.com/spf13/cobra/command.go
index 3ee1a0a9d..ae3930dfc 100644
--- a/vendor/github.com/spf13/cobra/command.go
+++ b/vendor/github.com/spf13/cobra/command.go
@@ -57,6 +57,9 @@ type Command struct {
Deprecated string
// Is this command hidden and should NOT show up in the list of available commands?
Hidden bool
+ // Annotations are key/value pairs that can be used by applications to identify or
+ // group commands
+ Annotations map[string]string
// Full set of flags
flags *flag.FlagSet
// Set of flags childrens of this command will inherit
@@ -152,12 +155,12 @@ func (c *Command) SetUsageTemplate(s string) {
}
// SetFlagErrorFunc sets a function to generate an error when flag parsing
-// fails
+// fails.
func (c *Command) SetFlagErrorFunc(f func(*Command, error) error) {
c.flagErrorFunc = f
}
-// SetHelpFunc sets help function. Can be defined by Application
+// SetHelpFunc sets help function. Can be defined by Application.
func (c *Command) SetHelpFunc(f func(*Command, []string)) {
c.helpFunc = f
}
@@ -184,7 +187,7 @@ func (c *Command) SetGlobalNormalizationFunc(n func(f *flag.FlagSet, name string
}
}
-// OutOrStdout returns output to stdout
+// OutOrStdout returns output to stdout.
func (c *Command) OutOrStdout() io.Writer {
return c.getOut(os.Stdout)
}
@@ -342,19 +345,19 @@ Aliases:
{{end}}{{if .HasExample}}
Examples:
-{{ .Example }}{{end}}{{ if .HasAvailableSubCommands}}
+{{ .Example }}{{end}}{{if .HasAvailableSubCommands}}
-Available Commands:{{range .Commands}}{{if .IsAvailableCommand}}
- {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{ if .HasAvailableLocalFlags}}
+Available Commands:{{range .Commands}}{{if (or .IsAvailableCommand (eq .Name "help"))}}
+ {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableLocalFlags}}
Flags:
-{{.LocalFlags.FlagUsages | trimRightSpace}}{{end}}{{ if .HasAvailableInheritedFlags}}
+{{.LocalFlags.FlagUsages | trimRightSpace}}{{end}}{{if .HasAvailableInheritedFlags}}
Global Flags:
{{.InheritedFlags.FlagUsages | trimRightSpace}}{{end}}{{if .HasHelpSubCommands}}
-Additional help topics:{{range .Commands}}{{if .IsHelpCommand}}
- {{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}{{ if .HasAvailableSubCommands }}
+Additional help topics:{{range .Commands}}{{if .IsAdditionalHelpTopicCommand}}
+ {{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableSubCommands}}
Use "{{.CommandPath}} [command] --help" for more information about a command.{{end}}
`
@@ -381,20 +384,18 @@ func (c *Command) resetChildrensParents() {
}
}
-// Test if the named flag is a boolean flag.
-func isBooleanFlag(name string, f *flag.FlagSet) bool {
+func hasNoOptDefVal(name string, f *flag.FlagSet) bool {
flag := f.Lookup(name)
if flag == nil {
return false
}
- return flag.Value.Type() == "bool"
+ return len(flag.NoOptDefVal) > 0
}
-// Test if the named flag is a boolean flag.
-func isBooleanShortFlag(name string, f *flag.FlagSet) bool {
+func shortHasNoOptDefVal(name string, fs *flag.FlagSet) bool {
result := false
- f.VisitAll(func(f *flag.Flag) {
- if f.Shorthand == name && f.Value.Type() == "bool" {
+ fs.VisitAll(func(flag *flag.Flag) {
+ if flag.Shorthand == name && len(flag.NoOptDefVal) > 0 {
result = true
}
})
@@ -420,8 +421,8 @@ func stripFlags(args []string, c *Command) []string {
inQuote = true
case strings.HasPrefix(y, "--") && !strings.Contains(y, "="):
// TODO: this isn't quite right, we should really check ahead for 'true' or 'false'
- inFlag = !isBooleanFlag(y[2:], c.Flags())
- case strings.HasPrefix(y, "-") && !strings.Contains(y, "=") && len(y) == 2 && !isBooleanShortFlag(y[1:], c.Flags()):
+ inFlag = !hasNoOptDefVal(y[2:], c.Flags())
+ case strings.HasPrefix(y, "-") && !strings.Contains(y, "=") && len(y) == 2 && !shortHasNoOptDefVal(y[1:], c.Flags()):
inFlag = true
case inFlag:
inFlag = false
@@ -455,7 +456,7 @@ func argsMinusFirstX(args []string, x string) []string {
return args
}
-// Find finds the target command given the args and command tree
+// Find the target command given the args and command tree
// Meant to be run on the highest node. Only searches down.
func (c *Command) Find(args []string) (*Command, []string, error) {
if c == nil {
@@ -695,7 +696,6 @@ func (c *Command) Execute() error {
// ExecuteC executes the command.
func (c *Command) ExecuteC() (cmd *Command, err error) {
-
// Regardless of what command execute is called on, run on Root only
if c.HasParent() {
return c.Root().ExecuteC()
@@ -780,7 +780,7 @@ func (c *Command) initHelpCmd() {
Run: func(c *Command, args []string) {
cmd, _, e := c.Root().Find(args)
if cmd == nil || e != nil {
- c.Printf("Unknown help topic %#q.", args)
+ c.Printf("Unknown help topic %#q\n", args)
c.Root().Usage()
} else {
cmd.Help()
@@ -969,7 +969,8 @@ func (c *Command) Name() string {
if i >= 0 {
name = name[:i]
}
- return name
+ c.name = name
+ return c.name
}
// HasAlias determines if a given string is an alias of the command.
@@ -1020,11 +1021,12 @@ func (c *Command) IsAvailableCommand() bool {
return false
}
-// IsHelpCommand determines if a command is a 'help' command; a help command is
-// determined by the fact that it is NOT runnable/hidden/deprecated, and has no
-// sub commands that are runnable/hidden/deprecated.
-func (c *Command) IsHelpCommand() bool {
-
+// IsAdditionalHelpTopicCommand determines if a command is an additional
+// help topic command; additional help topic command is determined by the
+// fact that it is NOT runnable/hidden/deprecated, and has no sub commands that
+// are runnable/hidden/deprecated.
+// Concrete example: https://github.com/spf13/cobra/issues/393#issuecomment-282741924.
+func (c *Command) IsAdditionalHelpTopicCommand() bool {
// if a command is runnable, deprecated, or hidden it is not a 'help' command
if c.Runnable() || len(c.Deprecated) != 0 || c.Hidden {
return false
@@ -1032,7 +1034,7 @@ func (c *Command) IsHelpCommand() bool {
// if any non-help sub commands are found, the command is not a 'help' command
for _, sub := range c.commands {
- if !sub.IsHelpCommand() {
+ if !sub.IsAdditionalHelpTopicCommand() {
return false
}
}
@@ -1045,10 +1047,9 @@ func (c *Command) IsHelpCommand() bool {
// that need to be shown in the usage/help default template under 'additional help
// topics'.
func (c *Command) HasHelpSubCommands() bool {
-
// return true on the first found available 'help' sub command
for _, sub := range c.commands {
- if sub.IsHelpCommand() {
+ if sub.IsAdditionalHelpTopicCommand() {
return true
}
}
@@ -1060,7 +1061,6 @@ func (c *Command) HasHelpSubCommands() bool {
// HasAvailableSubCommands determines if a command has available sub commands that
// need to be shown in the usage/help default template under 'available commands'.
func (c *Command) HasAvailableSubCommands() bool {
-
// return true on the first found available (non deprecated/help/hidden)
// sub command
for _, sub := range c.commands {
diff --git a/vendor/github.com/spf13/cobra/doc/man_docs.go b/vendor/github.com/spf13/cobra/doc/man_docs.go
index fd7107c42..b9266c367 100644
--- a/vendor/github.com/spf13/cobra/doc/man_docs.go
+++ b/vendor/github.com/spf13/cobra/doc/man_docs.go
@@ -49,7 +49,7 @@ func GenManTreeFromOpts(cmd *cobra.Command, opts GenManTreeOptions) error {
header = &GenManHeader{}
}
for _, c := range cmd.Commands() {
- if !c.IsAvailableCommand() || c.IsHelpCommand() {
+ if !c.IsAvailableCommand() || c.IsAdditionalHelpTopicCommand() {
continue
}
if err := GenManTreeFromOpts(c, opts); err != nil {
@@ -216,7 +216,7 @@ func genMan(cmd *cobra.Command, header *GenManHeader) []byte {
children := cmd.Commands()
sort.Sort(byName(children))
for _, c := range children {
- if !c.IsAvailableCommand() || c.IsHelpCommand() {
+ if !c.IsAvailableCommand() || c.IsAdditionalHelpTopicCommand() {
continue
}
seealso := fmt.Sprintf("**%s-%s(%s)**", dashCommandName, c.Name(), header.Section)
diff --git a/vendor/github.com/spf13/cobra/doc/md_docs.go b/vendor/github.com/spf13/cobra/doc/md_docs.go
index fa1363180..8d159c1d7 100644
--- a/vendor/github.com/spf13/cobra/doc/md_docs.go
+++ b/vendor/github.com/spf13/cobra/doc/md_docs.go
@@ -119,7 +119,7 @@ func GenMarkdownCustom(cmd *cobra.Command, w io.Writer, linkHandler func(string)
sort.Sort(byName(children))
for _, child := range children {
- if !child.IsAvailableCommand() || child.IsHelpCommand() {
+ if !child.IsAvailableCommand() || child.IsAdditionalHelpTopicCommand() {
continue
}
cname := name + " " + child.Name()
@@ -149,7 +149,7 @@ func GenMarkdownTree(cmd *cobra.Command, dir string) error {
func GenMarkdownTreeCustom(cmd *cobra.Command, dir string, filePrepender, linkHandler func(string) string) error {
for _, c := range cmd.Commands() {
- if !c.IsAvailableCommand() || c.IsHelpCommand() {
+ if !c.IsAvailableCommand() || c.IsAdditionalHelpTopicCommand() {
continue
}
if err := GenMarkdownTreeCustom(c, dir, filePrepender, linkHandler); err != nil {
diff --git a/vendor/github.com/spf13/cobra/doc/util.go b/vendor/github.com/spf13/cobra/doc/util.go
index a7d2765a9..8d3dbecec 100644
--- a/vendor/github.com/spf13/cobra/doc/util.go
+++ b/vendor/github.com/spf13/cobra/doc/util.go
@@ -27,7 +27,7 @@ func hasSeeAlso(cmd *cobra.Command) bool {
return true
}
for _, c := range cmd.Commands() {
- if !c.IsAvailableCommand() || c.IsHelpCommand() {
+ if !c.IsAvailableCommand() || c.IsAdditionalHelpTopicCommand() {
continue
}
return true
diff --git a/vendor/github.com/spf13/cobra/doc/yaml_docs.go b/vendor/github.com/spf13/cobra/doc/yaml_docs.go
index 75474d299..ac8db89eb 100644
--- a/vendor/github.com/spf13/cobra/doc/yaml_docs.go
+++ b/vendor/github.com/spf13/cobra/doc/yaml_docs.go
@@ -57,7 +57,7 @@ func GenYamlTree(cmd *cobra.Command, dir string) error {
// GenYamlTreeCustom creates yaml structured ref files
func GenYamlTreeCustom(cmd *cobra.Command, dir string, filePrepender, linkHandler func(string) string) error {
for _, c := range cmd.Commands() {
- if !c.IsAvailableCommand() || c.IsHelpCommand() {
+ if !c.IsAvailableCommand() || c.IsAdditionalHelpTopicCommand() {
continue
}
if err := GenYamlTreeCustom(c, dir, filePrepender, linkHandler); err != nil {
@@ -117,7 +117,7 @@ func GenYamlCustom(cmd *cobra.Command, w io.Writer, linkHandler func(string) str
children := cmd.Commands()
sort.Sort(byName(children))
for _, child := range children {
- if !child.IsAvailableCommand() || child.IsHelpCommand() {
+ if !child.IsAvailableCommand() || child.IsAdditionalHelpTopicCommand() {
continue
}
result = append(result, child.Name()+" - "+child.Short)
diff --git a/vendor/github.com/tylerb/graceful/README.md b/vendor/github.com/tylerb/graceful/README.md
index 328c3acf8..c641b6e78 100644
--- a/vendor/github.com/tylerb/graceful/README.md
+++ b/vendor/github.com/tylerb/graceful/README.md
@@ -3,6 +3,11 @@ graceful [![GoDoc](https://godoc.org/github.com/tylerb/graceful?status.png)](htt
Graceful is a Go 1.3+ package enabling graceful shutdown of http.Handler servers.
+## Using Go 1.8?
+
+If you are using Go 1.8, you may not need to use this library! Consider using `http.Server`'s built-in [Shutdown()](https://golang.org/pkg/net/http/#Server.Shutdown)
+method for graceful shutdowns.
+
## Installation
To install, simply execute:
diff --git a/vendor/github.com/tylerb/graceful/graceful.go b/vendor/github.com/tylerb/graceful/graceful.go
index d6a9ca068..ebf0aeb7d 100644
--- a/vendor/github.com/tylerb/graceful/graceful.go
+++ b/vendor/github.com/tylerb/graceful/graceful.go
@@ -366,6 +366,7 @@ func (srv *Server) manageConnections(add, idle, active, remove chan net.Conn, sh
select {
case conn := <-add:
srv.connections[conn] = struct{}{}
+ srv.idleConnections[conn] = struct{}{} // Newly-added connections are considered idle until they become active.
case conn := <-idle:
srv.idleConnections[conn] = struct{}{}
case conn := <-active:
diff --git a/vendor/github.com/xenolf/lego/README.md b/vendor/github.com/xenolf/lego/README.md
index 9be562944..852f0a833 100644
--- a/vendor/github.com/xenolf/lego/README.md
+++ b/vendor/github.com/xenolf/lego/README.md
@@ -23,7 +23,11 @@ To build lego inside a Docker container, just run
```
docker build -t lego .
```
-
+##### From the package manager
+- [ArchLinux (AUR)](https://aur.archlinux.org/packages/lego-git):
+```
+yaourt -S lego-git
+```
#### Features
- Register with CA
diff --git a/vendor/github.com/xenolf/lego/acme/client.go b/vendor/github.com/xenolf/lego/acme/client.go
index e824f5080..ba56e796c 100644
--- a/vendor/github.com/xenolf/lego/acme/client.go
+++ b/vendor/github.com/xenolf/lego/acme/client.go
@@ -535,6 +535,7 @@ func (c *Client) getChallenges(domains []string) ([]authorizationResource, map[s
links := parseLinks(hdr["Link"])
if links["next"] == "" {
logf("[ERROR][%s] acme: Server did not provide next link to proceed", domain)
+ errc <- domainError{Domain: domain, Error: errors.New("Server did not provide next link to proceed")}
return
}
@@ -560,12 +561,20 @@ func (c *Client) getChallenges(domains []string) ([]authorizationResource, map[s
}
}
+ logAuthz(challenges)
+
close(resc)
close(errc)
return challenges, failures
}
+func logAuthz(authz []authorizationResource) {
+ for _, auth := range authz {
+ logf("[INFO][%s] AuthURL: %s", auth.Domain, auth.AuthURL)
+ }
+}
+
func (c *Client) requestCertificate(authz []authorizationResource, bundle bool, privKey crypto.PrivateKey, mustStaple bool) (CertificateResource, error) {
if len(authz) == 0 {
return CertificateResource{}, errors.New("Passed no authorizations to requestCertificate!")
diff --git a/vendor/github.com/xenolf/lego/acme/client_test.go b/vendor/github.com/xenolf/lego/acme/client_test.go
index e309554f3..b18334c8a 100644
--- a/vendor/github.com/xenolf/lego/acme/client_test.go
+++ b/vendor/github.com/xenolf/lego/acme/client_test.go
@@ -10,6 +10,7 @@ import (
"net/http/httptest"
"strings"
"testing"
+ "time"
)
func TestNewClient(t *testing.T) {
@@ -118,6 +119,39 @@ func TestClientOptPort(t *testing.T) {
}
}
+func TestNotHoldingLockWhileMakingHTTPRequests(t *testing.T) {
+ ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ time.Sleep(250 * time.Millisecond)
+ w.Header().Add("Replay-Nonce", "12345")
+ w.Header().Add("Retry-After", "0")
+ writeJSONResponse(w, &challenge{Type: "http-01", Status: "Valid", URI: "http://example.com/", Token: "token"})
+ }))
+ defer ts.Close()
+
+ privKey, _ := rsa.GenerateKey(rand.Reader, 512)
+ j := &jws{privKey: privKey, directoryURL: ts.URL}
+ ch := make(chan bool)
+ resultCh := make(chan bool)
+ go func() {
+ j.Nonce()
+ ch <- true
+ }()
+ go func() {
+ j.Nonce()
+ ch <- true
+ }()
+ go func() {
+ <-ch
+ <-ch
+ resultCh <- true
+ }()
+ select {
+ case <-resultCh:
+ case <-time.After(400 * time.Millisecond):
+ t.Fatal("JWS is probably holding a lock while making HTTP request")
+ }
+}
+
func TestValidate(t *testing.T) {
var statuses []string
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
@@ -168,6 +202,43 @@ func TestValidate(t *testing.T) {
}
}
+func TestGetChallenges(t *testing.T) {
+ var ts *httptest.Server
+ ts = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ switch r.Method {
+ case "GET", "HEAD":
+ w.Header().Add("Replay-Nonce", "12345")
+ w.Header().Add("Retry-After", "0")
+ writeJSONResponse(w, directory{NewAuthzURL: ts.URL, NewCertURL: ts.URL, NewRegURL: ts.URL, RevokeCertURL: ts.URL})
+ case "POST":
+ writeJSONResponse(w, authorization{})
+ }
+ }))
+ defer ts.Close()
+
+ keyBits := 512 // small value keeps test fast
+ keyType := RSA2048
+ key, err := rsa.GenerateKey(rand.Reader, keyBits)
+ if err != nil {
+ t.Fatal("Could not generate test key:", err)
+ }
+ user := mockUser{
+ email: "test@test.com",
+ regres: &RegistrationResource{NewAuthzURL: ts.URL},
+ privatekey: key,
+ }
+
+ client, err := NewClient(ts.URL, user, keyType)
+ if err != nil {
+ t.Fatalf("Could not create client: %v", err)
+ }
+
+ _, failures := client.getChallenges([]string{"example.com"})
+ if failures["example.com"] == nil {
+ t.Fatal("Expecting \"Server did not provide next link to proceed\" error, got nil")
+ }
+}
+
// writeJSONResponse marshals the body as JSON and writes it to the response.
func writeJSONResponse(w http.ResponseWriter, body interface{}) {
bs, err := json.Marshal(body)
diff --git a/vendor/github.com/xenolf/lego/acme/error.go b/vendor/github.com/xenolf/lego/acme/error.go
index 6d7013cf1..e4bc934c2 100644
--- a/vendor/github.com/xenolf/lego/acme/error.go
+++ b/vendor/github.com/xenolf/lego/acme/error.go
@@ -8,7 +8,10 @@ import (
"strings"
)
-const tosAgreementError = "Must agree to subscriber agreement before any further actions"
+const (
+ tosAgreementError = "Must agree to subscriber agreement before any further actions"
+ invalidNonceError = "JWS has invalid anti-replay nonce"
+)
// RemoteError is the base type for all errors specific to the ACME protocol.
type RemoteError struct {
@@ -28,6 +31,12 @@ type TOSError struct {
RemoteError
}
+// NonceError represents the error which is returned if the
+// nonce sent by the client was not accepted by the server.
+type NonceError struct {
+ RemoteError
+}
+
type domainError struct {
Domain string
Error error
@@ -73,6 +82,10 @@ func handleHTTPError(resp *http.Response) error {
return TOSError{errorDetail}
}
+ if errorDetail.StatusCode == http.StatusBadRequest && strings.HasPrefix(errorDetail.Detail, invalidNonceError) {
+ return NonceError{errorDetail}
+ }
+
return errorDetail
}
diff --git a/vendor/github.com/xenolf/lego/acme/http.go b/vendor/github.com/xenolf/lego/acme/http.go
index 180db786d..dc958046a 100644
--- a/vendor/github.com/xenolf/lego/acme/http.go
+++ b/vendor/github.com/xenolf/lego/acme/http.go
@@ -31,14 +31,14 @@ const (
func httpHead(url string) (resp *http.Response, err error) {
req, err := http.NewRequest("HEAD", url, nil)
if err != nil {
- return nil, err
+ return nil, fmt.Errorf("failed to head %q: %v", url, err)
}
req.Header.Set("User-Agent", userAgent())
resp, err = HTTPClient.Do(req)
if err != nil {
- return resp, err
+ return resp, fmt.Errorf("failed to do head %q: %v", url, err)
}
resp.Body.Close()
return resp, err
@@ -49,7 +49,7 @@ func httpHead(url string) (resp *http.Response, err error) {
func httpPost(url string, bodyType string, body io.Reader) (resp *http.Response, err error) {
req, err := http.NewRequest("POST", url, body)
if err != nil {
- return nil, err
+ return nil, fmt.Errorf("failed to post %q: %v", url, err)
}
req.Header.Set("Content-Type", bodyType)
req.Header.Set("User-Agent", userAgent())
@@ -62,7 +62,7 @@ func httpPost(url string, bodyType string, body io.Reader) (resp *http.Response,
func httpGet(url string) (resp *http.Response, err error) {
req, err := http.NewRequest("GET", url, nil)
if err != nil {
- return nil, err
+ return nil, fmt.Errorf("failed to get %q: %v", url, err)
}
req.Header.Set("User-Agent", userAgent())
@@ -74,7 +74,7 @@ func httpGet(url string) (resp *http.Response, err error) {
func getJSON(uri string, respBody interface{}) (http.Header, error) {
resp, err := httpGet(uri)
if err != nil {
- return nil, fmt.Errorf("failed to get %q: %v", uri, err)
+ return nil, fmt.Errorf("failed to get json %q: %v", uri, err)
}
defer resp.Body.Close()
diff --git a/vendor/github.com/xenolf/lego/acme/jws.go b/vendor/github.com/xenolf/lego/acme/jws.go
index 2a1fc244d..1b4d29d53 100644
--- a/vendor/github.com/xenolf/lego/acme/jws.go
+++ b/vendor/github.com/xenolf/lego/acme/jws.go
@@ -16,8 +16,7 @@ import (
type jws struct {
directoryURL string
privKey crypto.PrivateKey
- nonces []string
- sync.Mutex
+ nonces nonceManager
}
func keyAsJWK(key interface{}) *jose.JsonWebKey {
@@ -38,19 +37,31 @@ func keyAsJWK(key interface{}) *jose.JsonWebKey {
func (j *jws) post(url string, content []byte) (*http.Response, error) {
signedContent, err := j.signContent(content)
if err != nil {
- return nil, err
+ return nil, fmt.Errorf("Failed to sign content -> %s", err.Error())
}
resp, err := httpPost(url, "application/jose+json", bytes.NewBuffer([]byte(signedContent.FullSerialize())))
- if err != nil {
- return nil, err
+
+ // Even in case of an error, the response should still contain a nonce.
+ nonce, nonceErr := getNonceFromResponse(resp)
+ if nonceErr == nil {
+ j.nonces.Push(nonce)
}
- j.Lock()
- defer j.Unlock()
- j.getNonceFromResponse(resp)
+ if err != nil {
+ switch err.(type) {
+ case NonceError:
+ // In case of a nonce error - retry once
+ resp, err = httpPost(url, "application/jose+json", bytes.NewBuffer([]byte(signedContent.FullSerialize())))
+ if err != nil {
+ return nil, fmt.Errorf("Failed to HTTP POST to %s -> %s", url, err.Error())
+ }
+ default:
+ return nil, fmt.Errorf("Failed to HTTP POST to %s -> %s", url, err.Error())
+ }
+ }
- return resp, err
+ return resp, nil
}
func (j *jws) signContent(content []byte) (*jose.JsonWebSignature, error) {
@@ -69,49 +80,63 @@ func (j *jws) signContent(content []byte) (*jose.JsonWebSignature, error) {
signer, err := jose.NewSigner(alg, j.privKey)
if err != nil {
- return nil, err
+ return nil, fmt.Errorf("Failed to create jose signer -> %s", err.Error())
}
signer.SetNonceSource(j)
signed, err := signer.Sign(content)
if err != nil {
- return nil, err
+ return nil, fmt.Errorf("Failed to sign content -> %s", err.Error())
}
return signed, nil
}
-func (j *jws) getNonceFromResponse(resp *http.Response) error {
- nonce := resp.Header.Get("Replay-Nonce")
- if nonce == "" {
- return fmt.Errorf("Server did not respond with a proper nonce header.")
+func (j *jws) Nonce() (string, error) {
+ if nonce, ok := j.nonces.Pop(); ok {
+ return nonce, nil
}
- j.nonces = append(j.nonces, nonce)
- return nil
+ return getNonce(j.directoryURL)
}
-func (j *jws) getNonce() error {
- resp, err := httpHead(j.directoryURL)
- if err != nil {
- return err
+type nonceManager struct {
+ nonces []string
+ sync.Mutex
+}
+
+func (n *nonceManager) Pop() (string, bool) {
+ n.Lock()
+ defer n.Unlock()
+
+ if len(n.nonces) == 0 {
+ return "", false
}
- return j.getNonceFromResponse(resp)
+ nonce := n.nonces[len(n.nonces)-1]
+ n.nonces = n.nonces[:len(n.nonces)-1]
+ return nonce, true
}
-func (j *jws) Nonce() (string, error) {
- j.Lock()
- defer j.Unlock()
- nonce := ""
- if len(j.nonces) == 0 {
- err := j.getNonce()
- if err != nil {
- return nonce, err
- }
+func (n *nonceManager) Push(nonce string) {
+ n.Lock()
+ defer n.Unlock()
+ n.nonces = append(n.nonces, nonce)
+}
+
+func getNonce(url string) (string, error) {
+ resp, err := httpHead(url)
+ if err != nil {
+ return "", fmt.Errorf("Failed to get nonce from HTTP HEAD -> %s", err.Error())
}
- if len(j.nonces) == 0 {
- return "", fmt.Errorf("Can't get nonce")
+
+ return getNonceFromResponse(resp)
+}
+
+func getNonceFromResponse(resp *http.Response) (string, error) {
+ nonce := resp.Header.Get("Replay-Nonce")
+ if nonce == "" {
+ return "", fmt.Errorf("Server did not respond with a proper nonce header.")
}
- nonce, j.nonces = j.nonces[len(j.nonces)-1], j.nonces[:len(j.nonces)-1]
+
return nonce, nil
}
diff --git a/vendor/github.com/xenolf/lego/providers/http/memcached/memcached.go b/vendor/github.com/xenolf/lego/providers/http/memcached/memcached.go
index 9c5f6c0b4..9ac8b811d 100644
--- a/vendor/github.com/xenolf/lego/providers/http/memcached/memcached.go
+++ b/vendor/github.com/xenolf/lego/providers/http/memcached/memcached.go
@@ -1,4 +1,5 @@
-// Package webroot implements a HTTP provider for solving the HTTP-01 challenge using web server's root path.
+// Package memcached implements a HTTP provider for solving the HTTP-01 challenge using memcached
+// in combination with a webserver.
package memcached
import (
diff --git a/vendor/golang.org/x/crypto/acme/acme.go b/vendor/golang.org/x/crypto/acme/acme.go
index 8aafada09..8619508e5 100644
--- a/vendor/golang.org/x/crypto/acme/acme.go
+++ b/vendor/golang.org/x/crypto/acme/acme.go
@@ -47,6 +47,10 @@ const LetsEncryptURL = "https://acme-v01.api.letsencrypt.org/directory"
const (
maxChainLen = 5 // max depth and breadth of a certificate chain
maxCertSize = 1 << 20 // max size of a certificate, in bytes
+
+ // Max number of collected nonces kept in memory.
+ // Expect usual peak of 1 or 2.
+ maxNonces = 100
)
// CertOption is an optional argument type for Client methods which manipulate
@@ -108,6 +112,9 @@ type Client struct {
dirMu sync.Mutex // guards writes to dir
dir *Directory // cached result of Client's Discover method
+
+ noncesMu sync.Mutex
+ nonces map[string]struct{} // nonces collected from previous responses
}
// Discover performs ACME server discovery using c.DirectoryURL.
@@ -131,6 +138,7 @@ func (c *Client) Discover(ctx context.Context) (Directory, error) {
return Directory{}, err
}
defer res.Body.Close()
+ c.addNonce(res.Header)
if res.StatusCode != http.StatusOK {
return Directory{}, responseError(res)
}
@@ -192,7 +200,7 @@ func (c *Client) CreateCert(ctx context.Context, csr []byte, exp time.Duration,
req.NotAfter = now.Add(exp).Format(time.RFC3339)
}
- res, err := postJWS(ctx, c.HTTPClient, c.Key, c.dir.CertURL, req)
+ res, err := c.postJWS(ctx, c.Key, c.dir.CertURL, req)
if err != nil {
return nil, "", err
}
@@ -267,7 +275,7 @@ func (c *Client) RevokeCert(ctx context.Context, key crypto.Signer, cert []byte,
if key == nil {
key = c.Key
}
- res, err := postJWS(ctx, c.HTTPClient, key, c.dir.RevokeURL, body)
+ res, err := c.postJWS(ctx, key, c.dir.RevokeURL, body)
if err != nil {
return err
}
@@ -355,7 +363,7 @@ func (c *Client) Authorize(ctx context.Context, domain string) (*Authorization,
Resource: "new-authz",
Identifier: authzID{Type: "dns", Value: domain},
}
- res, err := postJWS(ctx, c.HTTPClient, c.Key, c.dir.AuthzURL, req)
+ res, err := c.postJWS(ctx, c.Key, c.dir.AuthzURL, req)
if err != nil {
return nil, err
}
@@ -413,7 +421,7 @@ func (c *Client) RevokeAuthorization(ctx context.Context, url string) error {
Status: "deactivated",
Delete: true,
}
- res, err := postJWS(ctx, c.HTTPClient, c.Key, url, req)
+ res, err := c.postJWS(ctx, c.Key, url, req)
if err != nil {
return err
}
@@ -519,7 +527,7 @@ func (c *Client) Accept(ctx context.Context, chal *Challenge) (*Challenge, error
Type: chal.Type,
Auth: auth,
}
- res, err := postJWS(ctx, c.HTTPClient, c.Key, chal.URI, req)
+ res, err := c.postJWS(ctx, c.Key, chal.URI, req)
if err != nil {
return nil, err
}
@@ -652,7 +660,7 @@ func (c *Client) doReg(ctx context.Context, url string, typ string, acct *Accoun
req.Contact = acct.Contact
req.Agreement = acct.AgreedTerms
}
- res, err := postJWS(ctx, c.HTTPClient, c.Key, url, req)
+ res, err := c.postJWS(ctx, c.Key, url, req)
if err != nil {
return nil, err
}
@@ -689,6 +697,78 @@ func (c *Client) doReg(ctx context.Context, url string, typ string, acct *Accoun
}, nil
}
+// postJWS signs the body with the given key and POSTs it to the provided url.
+// The body argument must be JSON-serializable.
+func (c *Client) postJWS(ctx context.Context, key crypto.Signer, url string, body interface{}) (*http.Response, error) {
+ nonce, err := c.popNonce(ctx, url)
+ if err != nil {
+ return nil, err
+ }
+ b, err := jwsEncodeJSON(body, key, nonce)
+ if err != nil {
+ return nil, err
+ }
+ res, err := ctxhttp.Post(ctx, c.HTTPClient, url, "application/jose+json", bytes.NewReader(b))
+ if err != nil {
+ return nil, err
+ }
+ c.addNonce(res.Header)
+ return res, nil
+}
+
+// popNonce returns a nonce value previously stored with c.addNonce
+// or fetches a fresh one from the given URL.
+func (c *Client) popNonce(ctx context.Context, url string) (string, error) {
+ c.noncesMu.Lock()
+ defer c.noncesMu.Unlock()
+ if len(c.nonces) == 0 {
+ return fetchNonce(ctx, c.HTTPClient, url)
+ }
+ var nonce string
+ for nonce = range c.nonces {
+ delete(c.nonces, nonce)
+ break
+ }
+ return nonce, nil
+}
+
+// addNonce stores a nonce value found in h (if any) for future use.
+func (c *Client) addNonce(h http.Header) {
+ v := nonceFromHeader(h)
+ if v == "" {
+ return
+ }
+ c.noncesMu.Lock()
+ defer c.noncesMu.Unlock()
+ if len(c.nonces) >= maxNonces {
+ return
+ }
+ if c.nonces == nil {
+ c.nonces = make(map[string]struct{})
+ }
+ c.nonces[v] = struct{}{}
+}
+
+func fetchNonce(ctx context.Context, client *http.Client, url string) (string, error) {
+ resp, err := ctxhttp.Head(ctx, client, url)
+ if err != nil {
+ return "", err
+ }
+ defer resp.Body.Close()
+ nonce := nonceFromHeader(resp.Header)
+ if nonce == "" {
+ if resp.StatusCode > 299 {
+ return "", responseError(resp)
+ }
+ return "", errors.New("acme: nonce not found")
+ }
+ return nonce, nil
+}
+
+func nonceFromHeader(h http.Header) string {
+ return h.Get("Replay-Nonce")
+}
+
func responseCert(ctx context.Context, client *http.Client, res *http.Response, bundle bool) ([][]byte, error) {
b, err := ioutil.ReadAll(io.LimitReader(res.Body, maxCertSize+1))
if err != nil {
@@ -793,33 +873,6 @@ func chainCert(ctx context.Context, client *http.Client, url string, depth int)
return chain, nil
}
-// postJWS signs the body with the given key and POSTs it to the provided url.
-// The body argument must be JSON-serializable.
-func postJWS(ctx context.Context, client *http.Client, key crypto.Signer, url string, body interface{}) (*http.Response, error) {
- nonce, err := fetchNonce(ctx, client, url)
- if err != nil {
- return nil, err
- }
- b, err := jwsEncodeJSON(body, key, nonce)
- if err != nil {
- return nil, err
- }
- return ctxhttp.Post(ctx, client, url, "application/jose+json", bytes.NewReader(b))
-}
-
-func fetchNonce(ctx context.Context, client *http.Client, url string) (string, error) {
- resp, err := ctxhttp.Head(ctx, client, url)
- if err != nil {
- return "", nil
- }
- defer resp.Body.Close()
- enc := resp.Header.Get("replay-nonce")
- if enc == "" {
- return "", errors.New("acme: nonce not found")
- }
- return enc, nil
-}
-
// linkHeader returns URI-Reference values of all Link headers
// with relation-type rel.
// See https://tools.ietf.org/html/rfc5988#section-5 for details.
diff --git a/vendor/golang.org/x/crypto/acme/acme_test.go b/vendor/golang.org/x/crypto/acme/acme_test.go
index 4e618f292..1205dbb36 100644
--- a/vendor/golang.org/x/crypto/acme/acme_test.go
+++ b/vendor/golang.org/x/crypto/acme/acme_test.go
@@ -45,6 +45,28 @@ func decodeJWSRequest(t *testing.T, v interface{}, r *http.Request) {
}
}
+type jwsHead struct {
+ Alg string
+ Nonce string
+ JWK map[string]string `json:"jwk"`
+}
+
+func decodeJWSHead(r *http.Request) (*jwsHead, error) {
+ var req struct{ Protected string }
+ if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
+ return nil, err
+ }
+ b, err := base64.RawURLEncoding.DecodeString(req.Protected)
+ if err != nil {
+ return nil, err
+ }
+ var head jwsHead
+ if err := json.Unmarshal(b, &head); err != nil {
+ return nil, err
+ }
+ return &head, nil
+}
+
func TestDiscover(t *testing.T) {
const (
reg = "https://example.com/acme/new-reg"
@@ -916,7 +938,30 @@ func TestRevokeCert(t *testing.T) {
}
}
-func TestFetchNonce(t *testing.T) {
+func TestNonce_add(t *testing.T) {
+ var c Client
+ c.addNonce(http.Header{"Replay-Nonce": {"nonce"}})
+ c.addNonce(http.Header{"Replay-Nonce": {}})
+ c.addNonce(http.Header{"Replay-Nonce": {"nonce"}})
+
+ nonces := map[string]struct{}{"nonce": struct{}{}}
+ if !reflect.DeepEqual(c.nonces, nonces) {
+ t.Errorf("c.nonces = %q; want %q", c.nonces, nonces)
+ }
+}
+
+func TestNonce_addMax(t *testing.T) {
+ c := &Client{nonces: make(map[string]struct{})}
+ for i := 0; i < maxNonces; i++ {
+ c.nonces[fmt.Sprintf("%d", i)] = struct{}{}
+ }
+ c.addNonce(http.Header{"Replay-Nonce": {"nonce"}})
+ if n := len(c.nonces); n != maxNonces {
+ t.Errorf("len(c.nonces) = %d; want %d", n, maxNonces)
+ }
+}
+
+func TestNonce_fetch(t *testing.T) {
tests := []struct {
code int
nonce string
@@ -949,6 +994,76 @@ func TestFetchNonce(t *testing.T) {
}
}
+func TestNonce_fetchError(t *testing.T) {
+ ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ w.WriteHeader(http.StatusTooManyRequests)
+ }))
+ defer ts.Close()
+ _, err := fetchNonce(context.Background(), http.DefaultClient, ts.URL)
+ e, ok := err.(*Error)
+ if !ok {
+ t.Fatalf("err is %T; want *Error", err)
+ }
+ if e.StatusCode != http.StatusTooManyRequests {
+ t.Errorf("e.StatusCode = %d; want %d", e.StatusCode, http.StatusTooManyRequests)
+ }
+}
+
+func TestNonce_postJWS(t *testing.T) {
+ var count int
+ seen := make(map[string]bool)
+ ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ count++
+ w.Header().Set("replay-nonce", fmt.Sprintf("nonce%d", count))
+ if r.Method == "HEAD" {
+ // We expect the client do a HEAD request
+ // but only to fetch the first nonce.
+ return
+ }
+ // Make client.Authorize happy; we're not testing its result.
+ defer func() {
+ w.WriteHeader(http.StatusCreated)
+ w.Write([]byte(`{"status":"valid"}`))
+ }()
+
+ head, err := decodeJWSHead(r)
+ if err != nil {
+ t.Errorf("decodeJWSHead: %v", err)
+ return
+ }
+ if head.Nonce == "" {
+ t.Error("head.Nonce is empty")
+ return
+ }
+ if seen[head.Nonce] {
+ t.Errorf("nonce is already used: %q", head.Nonce)
+ }
+ seen[head.Nonce] = true
+ }))
+ defer ts.Close()
+
+ client := Client{Key: testKey, dir: &Directory{AuthzURL: ts.URL}}
+ if _, err := client.Authorize(context.Background(), "example.com"); err != nil {
+ t.Errorf("client.Authorize 1: %v", err)
+ }
+ // The second call should not generate another extra HEAD request.
+ if _, err := client.Authorize(context.Background(), "example.com"); err != nil {
+ t.Errorf("client.Authorize 2: %v", err)
+ }
+
+ if count != 3 {
+ t.Errorf("total requests count: %d; want 3", count)
+ }
+ if n := len(client.nonces); n != 1 {
+ t.Errorf("len(client.nonces) = %d; want 1", n)
+ }
+ for k := range seen {
+ if _, exist := client.nonces[k]; exist {
+ t.Errorf("used nonce %q in client.nonces", k)
+ }
+ }
+}
+
func TestLinkHeader(t *testing.T) {
h := http.Header{"Link": {
`<https://example.com/acme/new-authz>;rel="next"`,
diff --git a/vendor/golang.org/x/crypto/acme/autocert/autocert_test.go b/vendor/golang.org/x/crypto/acme/autocert/autocert_test.go
index 4bcd6d532..7afb21331 100644
--- a/vendor/golang.org/x/crypto/acme/autocert/autocert_test.go
+++ b/vendor/golang.org/x/crypto/acme/autocert/autocert_test.go
@@ -22,6 +22,7 @@ import (
"net/http"
"net/http/httptest"
"reflect"
+ "sync"
"testing"
"time"
@@ -51,26 +52,44 @@ var authzTmpl = template.Must(template.New("authz").Parse(`{
]
}`))
-type memCache map[string][]byte
+type memCache struct {
+ mu sync.Mutex
+ keyData map[string][]byte
+}
+
+func (m *memCache) Get(ctx context.Context, key string) ([]byte, error) {
+ m.mu.Lock()
+ defer m.mu.Unlock()
-func (m memCache) Get(ctx context.Context, key string) ([]byte, error) {
- v, ok := m[key]
+ v, ok := m.keyData[key]
if !ok {
return nil, ErrCacheMiss
}
return v, nil
}
-func (m memCache) Put(ctx context.Context, key string, data []byte) error {
- m[key] = data
+func (m *memCache) Put(ctx context.Context, key string, data []byte) error {
+ m.mu.Lock()
+ defer m.mu.Unlock()
+
+ m.keyData[key] = data
return nil
}
-func (m memCache) Delete(ctx context.Context, key string) error {
- delete(m, key)
+func (m *memCache) Delete(ctx context.Context, key string) error {
+ m.mu.Lock()
+ defer m.mu.Unlock()
+
+ delete(m.keyData, key)
return nil
}
+func newMemCache() *memCache {
+ return &memCache{
+ keyData: make(map[string][]byte),
+ }
+}
+
func dummyCert(pub interface{}, san ...string) ([]byte, error) {
return dateDummyCert(pub, time.Now(), time.Now().Add(90*24*time.Hour), san...)
}
@@ -124,7 +143,7 @@ func TestGetCertificate_trailingDot(t *testing.T) {
func TestGetCertificate_ForceRSA(t *testing.T) {
man := &Manager{
Prompt: AcceptTOS,
- Cache: make(memCache),
+ Cache: newMemCache(),
ForceRSA: true,
}
defer man.stopRenew()
@@ -280,8 +299,7 @@ func testGetCertificate(t *testing.T, man *Manager, domain string, hello *tls.Cl
}
func TestAccountKeyCache(t *testing.T) {
- cache := make(memCache)
- m := Manager{Cache: cache}
+ m := Manager{Cache: newMemCache()}
ctx := context.Background()
k1, err := m.accountKey(ctx)
if err != nil {
@@ -315,8 +333,7 @@ func TestCache(t *testing.T) {
PrivateKey: privKey,
}
- cache := make(memCache)
- man := &Manager{Cache: cache}
+ man := &Manager{Cache: newMemCache()}
defer man.stopRenew()
if err := man.cachePut("example.org", tlscert); err != nil {
t.Fatalf("man.cachePut: %v", err)
diff --git a/vendor/golang.org/x/crypto/acme/autocert/renewal_test.go b/vendor/golang.org/x/crypto/acme/autocert/renewal_test.go
index d1ec52f4d..10c811ac4 100644
--- a/vendor/golang.org/x/crypto/acme/autocert/renewal_test.go
+++ b/vendor/golang.org/x/crypto/acme/autocert/renewal_test.go
@@ -111,7 +111,7 @@ func TestRenewFromCache(t *testing.T) {
}
man := &Manager{
Prompt: AcceptTOS,
- Cache: make(memCache),
+ Cache: newMemCache(),
RenewBefore: 24 * time.Hour,
Client: &acme.Client{
Key: key,
diff --git a/vendor/golang.org/x/crypto/blake2b/blake2bAVX2_amd64.s b/vendor/golang.org/x/crypto/blake2b/blake2bAVX2_amd64.s
index 96a51d524..784bce6a9 100644
--- a/vendor/golang.org/x/crypto/blake2b/blake2bAVX2_amd64.s
+++ b/vendor/golang.org/x/crypto/blake2b/blake2bAVX2_amd64.s
@@ -54,68 +54,223 @@ DATA ·AVX_c48<>+0x00(SB)/8, $0x0100070605040302
DATA ·AVX_c48<>+0x08(SB)/8, $0x09080f0e0d0c0b0a
GLOBL ·AVX_c48<>(SB), (NOPTR+RODATA), $16
-// unfortunately the BYTE representation of VPERMQ must be used
+#define VPERMQ_0x39_Y1_Y1 BYTE $0xc4; BYTE $0xe3; BYTE $0xfd; BYTE $0x00; BYTE $0xc9; BYTE $0x39
+#define VPERMQ_0x93_Y1_Y1 BYTE $0xc4; BYTE $0xe3; BYTE $0xfd; BYTE $0x00; BYTE $0xc9; BYTE $0x93
+#define VPERMQ_0x4E_Y2_Y2 BYTE $0xc4; BYTE $0xe3; BYTE $0xfd; BYTE $0x00; BYTE $0xd2; BYTE $0x4e
+#define VPERMQ_0x93_Y3_Y3 BYTE $0xc4; BYTE $0xe3; BYTE $0xfd; BYTE $0x00; BYTE $0xdb; BYTE $0x93
+#define VPERMQ_0x39_Y3_Y3 BYTE $0xc4; BYTE $0xe3; BYTE $0xfd; BYTE $0x00; BYTE $0xdb; BYTE $0x39
+
#define ROUND_AVX2(m0, m1, m2, m3, t, c40, c48) \
- VPADDQ m0, Y0, Y0; \
- VPADDQ Y1, Y0, Y0; \
- VPXOR Y0, Y3, Y3; \
- VPSHUFD $-79, Y3, Y3; \
- VPADDQ Y3, Y2, Y2; \
- VPXOR Y2, Y1, Y1; \
- VPSHUFB c40, Y1, Y1; \
- VPADDQ m1, Y0, Y0; \
- VPADDQ Y1, Y0, Y0; \
- VPXOR Y0, Y3, Y3; \
- VPSHUFB c48, Y3, Y3; \
- VPADDQ Y3, Y2, Y2; \
- VPXOR Y2, Y1, Y1; \
- VPADDQ Y1, Y1, t; \
- VPSRLQ $63, Y1, Y1; \
- VPXOR t, Y1, Y1; \
- BYTE $0xc4; BYTE $0xe3; BYTE $0xfd; BYTE $0x00; BYTE $0xc9; BYTE $0x39 \ // VPERMQ 0x39, Y1, Y1
- BYTE $0xc4; BYTE $0xe3; BYTE $0xfd; BYTE $0x00; BYTE $0xd2; BYTE $0x4e \ // VPERMQ 0x4e, Y2, Y2
- BYTE $0xc4; BYTE $0xe3; BYTE $0xfd; BYTE $0x00; BYTE $0xdb; BYTE $0x93 \ // VPERMQ 0x93, Y3, Y3
- VPADDQ m2, Y0, Y0; \
- VPADDQ Y1, Y0, Y0; \
- VPXOR Y0, Y3, Y3; \
- VPSHUFD $-79, Y3, Y3; \
- VPADDQ Y3, Y2, Y2; \
- VPXOR Y2, Y1, Y1; \
- VPSHUFB c40, Y1, Y1; \
- VPADDQ m3, Y0, Y0; \
- VPADDQ Y1, Y0, Y0; \
- VPXOR Y0, Y3, Y3; \
- VPSHUFB c48, Y3, Y3; \
- VPADDQ Y3, Y2, Y2; \
- VPXOR Y2, Y1, Y1; \
- VPADDQ Y1, Y1, t; \
- VPSRLQ $63, Y1, Y1; \
- VPXOR t, Y1, Y1; \
- BYTE $0xc4; BYTE $0xe3; BYTE $0xfd; BYTE $0x00; BYTE $0xdb; BYTE $0x39 \ // VPERMQ 0x39, Y3, Y3
- BYTE $0xc4; BYTE $0xe3; BYTE $0xfd; BYTE $0x00; BYTE $0xd2; BYTE $0x4e \ // VPERMQ 0x4e, Y2, Y2
- BYTE $0xc4; BYTE $0xe3; BYTE $0xfd; BYTE $0x00; BYTE $0xc9; BYTE $0x93 \ // VPERMQ 0x93, Y1, Y1
-
-// load msg into Y12, Y13, Y14, Y15
-#define LOAD_MSG_AVX2(src, i0, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15) \
- MOVQ i0*8(src), X12; \
- PINSRQ $1, i1*8(src), X12; \
- MOVQ i2*8(src), X11; \
- PINSRQ $1, i3*8(src), X11; \
- VINSERTI128 $1, X11, Y12, Y12; \
- MOVQ i4*8(src), X13; \
- PINSRQ $1, i5*8(src), X13; \
- MOVQ i6*8(src), X11; \
- PINSRQ $1, i7*8(src), X11; \
- VINSERTI128 $1, X11, Y13, Y13; \
- MOVQ i8*8(src), X14; \
- PINSRQ $1, i9*8(src), X14; \
- MOVQ i10*8(src), X11; \
- PINSRQ $1, i11*8(src), X11; \
+ VPADDQ m0, Y0, Y0; \
+ VPADDQ Y1, Y0, Y0; \
+ VPXOR Y0, Y3, Y3; \
+ VPSHUFD $-79, Y3, Y3; \
+ VPADDQ Y3, Y2, Y2; \
+ VPXOR Y2, Y1, Y1; \
+ VPSHUFB c40, Y1, Y1; \
+ VPADDQ m1, Y0, Y0; \
+ VPADDQ Y1, Y0, Y0; \
+ VPXOR Y0, Y3, Y3; \
+ VPSHUFB c48, Y3, Y3; \
+ VPADDQ Y3, Y2, Y2; \
+ VPXOR Y2, Y1, Y1; \
+ VPADDQ Y1, Y1, t; \
+ VPSRLQ $63, Y1, Y1; \
+ VPXOR t, Y1, Y1; \
+ VPERMQ_0x39_Y1_Y1; \
+ VPERMQ_0x4E_Y2_Y2; \
+ VPERMQ_0x93_Y3_Y3; \
+ VPADDQ m2, Y0, Y0; \
+ VPADDQ Y1, Y0, Y0; \
+ VPXOR Y0, Y3, Y3; \
+ VPSHUFD $-79, Y3, Y3; \
+ VPADDQ Y3, Y2, Y2; \
+ VPXOR Y2, Y1, Y1; \
+ VPSHUFB c40, Y1, Y1; \
+ VPADDQ m3, Y0, Y0; \
+ VPADDQ Y1, Y0, Y0; \
+ VPXOR Y0, Y3, Y3; \
+ VPSHUFB c48, Y3, Y3; \
+ VPADDQ Y3, Y2, Y2; \
+ VPXOR Y2, Y1, Y1; \
+ VPADDQ Y1, Y1, t; \
+ VPSRLQ $63, Y1, Y1; \
+ VPXOR t, Y1, Y1; \
+ VPERMQ_0x39_Y3_Y3; \
+ VPERMQ_0x4E_Y2_Y2; \
+ VPERMQ_0x93_Y1_Y1
+
+#define VMOVQ_SI_X11_0 BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x1E
+#define VMOVQ_SI_X12_0 BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x26
+#define VMOVQ_SI_X13_0 BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x2E
+#define VMOVQ_SI_X14_0 BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x36
+#define VMOVQ_SI_X15_0 BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x3E
+
+#define VMOVQ_SI_X11(n) BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x5E; BYTE $n
+#define VMOVQ_SI_X12(n) BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x66; BYTE $n
+#define VMOVQ_SI_X13(n) BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x6E; BYTE $n
+#define VMOVQ_SI_X14(n) BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x76; BYTE $n
+#define VMOVQ_SI_X15(n) BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x7E; BYTE $n
+
+#define VPINSRQ_1_SI_X11_0 BYTE $0xC4; BYTE $0x63; BYTE $0xA1; BYTE $0x22; BYTE $0x1E; BYTE $0x01
+#define VPINSRQ_1_SI_X12_0 BYTE $0xC4; BYTE $0x63; BYTE $0x99; BYTE $0x22; BYTE $0x26; BYTE $0x01
+#define VPINSRQ_1_SI_X13_0 BYTE $0xC4; BYTE $0x63; BYTE $0x91; BYTE $0x22; BYTE $0x2E; BYTE $0x01
+#define VPINSRQ_1_SI_X14_0 BYTE $0xC4; BYTE $0x63; BYTE $0x89; BYTE $0x22; BYTE $0x36; BYTE $0x01
+#define VPINSRQ_1_SI_X15_0 BYTE $0xC4; BYTE $0x63; BYTE $0x81; BYTE $0x22; BYTE $0x3E; BYTE $0x01
+
+#define VPINSRQ_1_SI_X11(n) BYTE $0xC4; BYTE $0x63; BYTE $0xA1; BYTE $0x22; BYTE $0x5E; BYTE $n; BYTE $0x01
+#define VPINSRQ_1_SI_X12(n) BYTE $0xC4; BYTE $0x63; BYTE $0x99; BYTE $0x22; BYTE $0x66; BYTE $n; BYTE $0x01
+#define VPINSRQ_1_SI_X13(n) BYTE $0xC4; BYTE $0x63; BYTE $0x91; BYTE $0x22; BYTE $0x6E; BYTE $n; BYTE $0x01
+#define VPINSRQ_1_SI_X14(n) BYTE $0xC4; BYTE $0x63; BYTE $0x89; BYTE $0x22; BYTE $0x76; BYTE $n; BYTE $0x01
+#define VPINSRQ_1_SI_X15(n) BYTE $0xC4; BYTE $0x63; BYTE $0x81; BYTE $0x22; BYTE $0x7E; BYTE $n; BYTE $0x01
+
+#define VMOVQ_R8_X15 BYTE $0xC4; BYTE $0x41; BYTE $0xF9; BYTE $0x6E; BYTE $0xF8
+#define VPINSRQ_1_R9_X15 BYTE $0xC4; BYTE $0x43; BYTE $0x81; BYTE $0x22; BYTE $0xF9; BYTE $0x01
+
+// load msg: Y12 = (i0, i1, i2, i3)
+// i0, i1, i2, i3 must not be 0
+#define LOAD_MSG_AVX2_Y12(i0, i1, i2, i3) \
+ VMOVQ_SI_X12(i0*8); \
+ VMOVQ_SI_X11(i2*8); \
+ VPINSRQ_1_SI_X12(i1*8); \
+ VPINSRQ_1_SI_X11(i3*8); \
+ VINSERTI128 $1, X11, Y12, Y12
+
+// load msg: Y13 = (i0, i1, i2, i3)
+// i0, i1, i2, i3 must not be 0
+#define LOAD_MSG_AVX2_Y13(i0, i1, i2, i3) \
+ VMOVQ_SI_X13(i0*8); \
+ VMOVQ_SI_X11(i2*8); \
+ VPINSRQ_1_SI_X13(i1*8); \
+ VPINSRQ_1_SI_X11(i3*8); \
+ VINSERTI128 $1, X11, Y13, Y13
+
+// load msg: Y14 = (i0, i1, i2, i3)
+// i0, i1, i2, i3 must not be 0
+#define LOAD_MSG_AVX2_Y14(i0, i1, i2, i3) \
+ VMOVQ_SI_X14(i0*8); \
+ VMOVQ_SI_X11(i2*8); \
+ VPINSRQ_1_SI_X14(i1*8); \
+ VPINSRQ_1_SI_X11(i3*8); \
+ VINSERTI128 $1, X11, Y14, Y14
+
+// load msg: Y15 = (i0, i1, i2, i3)
+// i0, i1, i2, i3 must not be 0
+#define LOAD_MSG_AVX2_Y15(i0, i1, i2, i3) \
+ VMOVQ_SI_X15(i0*8); \
+ VMOVQ_SI_X11(i2*8); \
+ VPINSRQ_1_SI_X15(i1*8); \
+ VPINSRQ_1_SI_X11(i3*8); \
+ VINSERTI128 $1, X11, Y15, Y15
+
+#define LOAD_MSG_AVX2_0_2_4_6_1_3_5_7_8_10_12_14_9_11_13_15() \
+ VMOVQ_SI_X12_0; \
+ VMOVQ_SI_X11(4*8); \
+ VPINSRQ_1_SI_X12(2*8); \
+ VPINSRQ_1_SI_X11(6*8); \
+ VINSERTI128 $1, X11, Y12, Y12; \
+ LOAD_MSG_AVX2_Y13(1, 3, 5, 7); \
+ LOAD_MSG_AVX2_Y14(8, 10, 12, 14); \
+ LOAD_MSG_AVX2_Y15(9, 11, 13, 15)
+
+#define LOAD_MSG_AVX2_14_4_9_13_10_8_15_6_1_0_11_5_12_2_7_3() \
+ LOAD_MSG_AVX2_Y12(14, 4, 9, 13); \
+ LOAD_MSG_AVX2_Y13(10, 8, 15, 6); \
+ VMOVQ_SI_X11(11*8); \
+ VPSHUFD $0x4E, 0*8(SI), X14; \
+ VPINSRQ_1_SI_X11(5*8); \
VINSERTI128 $1, X11, Y14, Y14; \
- MOVQ i12*8(src), X15; \
- PINSRQ $1, i13*8(src), X15; \
- MOVQ i14*8(src), X11; \
- PINSRQ $1, i15*8(src), X11; \
+ LOAD_MSG_AVX2_Y15(12, 2, 7, 3)
+
+#define LOAD_MSG_AVX2_11_12_5_15_8_0_2_13_10_3_7_9_14_6_1_4() \
+ VMOVQ_SI_X11(5*8); \
+ VMOVDQU 11*8(SI), X12; \
+ VPINSRQ_1_SI_X11(15*8); \
+ VINSERTI128 $1, X11, Y12, Y12; \
+ VMOVQ_SI_X13(8*8); \
+ VMOVQ_SI_X11(2*8); \
+ VPINSRQ_1_SI_X13_0; \
+ VPINSRQ_1_SI_X11(13*8); \
+ VINSERTI128 $1, X11, Y13, Y13; \
+ LOAD_MSG_AVX2_Y14(10, 3, 7, 9); \
+ LOAD_MSG_AVX2_Y15(14, 6, 1, 4)
+
+#define LOAD_MSG_AVX2_7_3_13_11_9_1_12_14_2_5_4_15_6_10_0_8() \
+ LOAD_MSG_AVX2_Y12(7, 3, 13, 11); \
+ LOAD_MSG_AVX2_Y13(9, 1, 12, 14); \
+ LOAD_MSG_AVX2_Y14(2, 5, 4, 15); \
+ VMOVQ_SI_X15(6*8); \
+ VMOVQ_SI_X11_0; \
+ VPINSRQ_1_SI_X15(10*8); \
+ VPINSRQ_1_SI_X11(8*8); \
+ VINSERTI128 $1, X11, Y15, Y15
+
+#define LOAD_MSG_AVX2_9_5_2_10_0_7_4_15_14_11_6_3_1_12_8_13() \
+ LOAD_MSG_AVX2_Y12(9, 5, 2, 10); \
+ VMOVQ_SI_X13_0; \
+ VMOVQ_SI_X11(4*8); \
+ VPINSRQ_1_SI_X13(7*8); \
+ VPINSRQ_1_SI_X11(15*8); \
+ VINSERTI128 $1, X11, Y13, Y13; \
+ LOAD_MSG_AVX2_Y14(14, 11, 6, 3); \
+ LOAD_MSG_AVX2_Y15(1, 12, 8, 13)
+
+#define LOAD_MSG_AVX2_2_6_0_8_12_10_11_3_4_7_15_1_13_5_14_9() \
+ VMOVQ_SI_X12(2*8); \
+ VMOVQ_SI_X11_0; \
+ VPINSRQ_1_SI_X12(6*8); \
+ VPINSRQ_1_SI_X11(8*8); \
+ VINSERTI128 $1, X11, Y12, Y12; \
+ LOAD_MSG_AVX2_Y13(12, 10, 11, 3); \
+ LOAD_MSG_AVX2_Y14(4, 7, 15, 1); \
+ LOAD_MSG_AVX2_Y15(13, 5, 14, 9)
+
+#define LOAD_MSG_AVX2_12_1_14_4_5_15_13_10_0_6_9_8_7_3_2_11() \
+ LOAD_MSG_AVX2_Y12(12, 1, 14, 4); \
+ LOAD_MSG_AVX2_Y13(5, 15, 13, 10); \
+ VMOVQ_SI_X14_0; \
+ VPSHUFD $0x4E, 8*8(SI), X11; \
+ VPINSRQ_1_SI_X14(6*8); \
+ VINSERTI128 $1, X11, Y14, Y14; \
+ LOAD_MSG_AVX2_Y15(7, 3, 2, 11)
+
+#define LOAD_MSG_AVX2_13_7_12_3_11_14_1_9_5_15_8_2_0_4_6_10() \
+ LOAD_MSG_AVX2_Y12(13, 7, 12, 3); \
+ LOAD_MSG_AVX2_Y13(11, 14, 1, 9); \
+ LOAD_MSG_AVX2_Y14(5, 15, 8, 2); \
+ VMOVQ_SI_X15_0; \
+ VMOVQ_SI_X11(6*8); \
+ VPINSRQ_1_SI_X15(4*8); \
+ VPINSRQ_1_SI_X11(10*8); \
+ VINSERTI128 $1, X11, Y15, Y15
+
+#define LOAD_MSG_AVX2_6_14_11_0_15_9_3_8_12_13_1_10_2_7_4_5() \
+ VMOVQ_SI_X12(6*8); \
+ VMOVQ_SI_X11(11*8); \
+ VPINSRQ_1_SI_X12(14*8); \
+ VPINSRQ_1_SI_X11_0; \
+ VINSERTI128 $1, X11, Y12, Y12; \
+ LOAD_MSG_AVX2_Y13(15, 9, 3, 8); \
+ VMOVQ_SI_X11(1*8); \
+ VMOVDQU 12*8(SI), X14; \
+ VPINSRQ_1_SI_X11(10*8); \
+ VINSERTI128 $1, X11, Y14, Y14; \
+ VMOVQ_SI_X15(2*8); \
+ VMOVDQU 4*8(SI), X11; \
+ VPINSRQ_1_SI_X15(7*8); \
+ VINSERTI128 $1, X11, Y15, Y15
+
+#define LOAD_MSG_AVX2_10_8_7_1_2_4_6_5_15_9_3_13_11_14_12_0() \
+ LOAD_MSG_AVX2_Y12(10, 8, 7, 1); \
+ VMOVQ_SI_X13(2*8); \
+ VPSHUFD $0x4E, 5*8(SI), X11; \
+ VPINSRQ_1_SI_X13(4*8); \
+ VINSERTI128 $1, X11, Y13, Y13; \
+ LOAD_MSG_AVX2_Y14(15, 9, 3, 13); \
+ VMOVQ_SI_X15(11*8); \
+ VMOVQ_SI_X11(12*8); \
+ VPINSRQ_1_SI_X15(14*8); \
+ VPINSRQ_1_SI_X11_0; \
VINSERTI128 $1, X11, Y15, Y15
// func hashBlocksAVX2(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte)
@@ -162,34 +317,34 @@ noinc:
VMOVDQA Y6, Y2
VPXOR 0(SP), Y7, Y3
- LOAD_MSG_AVX2(SI, 0, 2, 4, 6, 1, 3, 5, 7, 8, 10, 12, 14, 9, 11, 13, 15)
+ LOAD_MSG_AVX2_0_2_4_6_1_3_5_7_8_10_12_14_9_11_13_15()
VMOVDQA Y12, 32(SP)
VMOVDQA Y13, 64(SP)
VMOVDQA Y14, 96(SP)
VMOVDQA Y15, 128(SP)
ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5)
- LOAD_MSG_AVX2(SI, 14, 4, 9, 13, 10, 8, 15, 6, 1, 0, 11, 5, 12, 2, 7, 3)
+ LOAD_MSG_AVX2_14_4_9_13_10_8_15_6_1_0_11_5_12_2_7_3()
VMOVDQA Y12, 160(SP)
VMOVDQA Y13, 192(SP)
VMOVDQA Y14, 224(SP)
VMOVDQA Y15, 256(SP)
ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5)
- LOAD_MSG_AVX2(SI, 11, 12, 5, 15, 8, 0, 2, 13, 10, 3, 7, 9, 14, 6, 1, 4)
+ LOAD_MSG_AVX2_11_12_5_15_8_0_2_13_10_3_7_9_14_6_1_4()
ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5)
- LOAD_MSG_AVX2(SI, 7, 3, 13, 11, 9, 1, 12, 14, 2, 5, 4, 15, 6, 10, 0, 8)
+ LOAD_MSG_AVX2_7_3_13_11_9_1_12_14_2_5_4_15_6_10_0_8()
ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5)
- LOAD_MSG_AVX2(SI, 9, 5, 2, 10, 0, 7, 4, 15, 14, 11, 6, 3, 1, 12, 8, 13)
+ LOAD_MSG_AVX2_9_5_2_10_0_7_4_15_14_11_6_3_1_12_8_13()
ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5)
- LOAD_MSG_AVX2(SI, 2, 6, 0, 8, 12, 10, 11, 3, 4, 7, 15, 1, 13, 5, 14, 9)
+ LOAD_MSG_AVX2_2_6_0_8_12_10_11_3_4_7_15_1_13_5_14_9()
ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5)
- LOAD_MSG_AVX2(SI, 12, 1, 14, 4, 5, 15, 13, 10, 0, 6, 9, 8, 7, 3, 2, 11)
+ LOAD_MSG_AVX2_12_1_14_4_5_15_13_10_0_6_9_8_7_3_2_11()
ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5)
- LOAD_MSG_AVX2(SI, 13, 7, 12, 3, 11, 14, 1, 9, 5, 15, 8, 2, 0, 4, 6, 10)
+ LOAD_MSG_AVX2_13_7_12_3_11_14_1_9_5_15_8_2_0_4_6_10()
ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5)
- LOAD_MSG_AVX2(SI, 6, 14, 11, 0, 15, 9, 3, 8, 12, 13, 1, 10, 2, 7, 4, 5)
+ LOAD_MSG_AVX2_6_14_11_0_15_9_3_8_12_13_1_10_2_7_4_5()
ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5)
- LOAD_MSG_AVX2(SI, 10, 8, 7, 1, 2, 4, 6, 5, 15, 9, 3, 13, 11, 14, 12, 0)
+ LOAD_MSG_AVX2_10_8_7_1_2_4_6_5_15_9_3_13_11_14_12_0()
ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5)
ROUND_AVX2(32(SP), 64(SP), 96(SP), 128(SP), Y10, Y4, Y5)
@@ -209,56 +364,55 @@ noinc:
VMOVDQU Y8, 0(AX)
VMOVDQU Y9, 32(AX)
+ VZEROUPPER
MOVQ DX, SP
RET
-// unfortunately the BYTE representation of VPUNPCKLQDQ and VPUNPCKHQDQ must be used
-#define VPUNPCKLQDQ_X8_X8_X10 BYTE $0xC4; BYTE $0x41; BYTE $0x39; BYTE $0x6C; BYTE $0xD0
-#define VPUNPCKHQDQ_X7_X10_X6 BYTE $0xC4; BYTE $0xC1; BYTE $0x41; BYTE $0x6D; BYTE $0xF2
-#define VPUNPCKLQDQ_X7_X7_X10 BYTE $0xC5; BYTE $0x41; BYTE $0x6C; BYTE $0xD7
-#define VPUNPCKHQDQ_X8_X10_X7 BYTE $0xC4; BYTE $0xC1; BYTE $0x39; BYTE $0x6D; BYTE $0xFA
-#define VPUNPCKLQDQ_X3_X3_X10 BYTE $0xC5; BYTE $0x61; BYTE $0x6C; BYTE $0xD3
-#define VPUNPCKHQDQ_X2_X10_X2 BYTE $0xC4; BYTE $0xC1; BYTE $0x69; BYTE $0x6D; BYTE $0xD2
-#define VPUNPCKLQDQ_X9_X9_X10 BYTE $0xC4; BYTE $0x41; BYTE $0x31; BYTE $0x6C; BYTE $0xD1
-#define VPUNPCKHQDQ_X3_X10_X3 BYTE $0xC4; BYTE $0xC1; BYTE $0x61; BYTE $0x6D; BYTE $0xDA
-#define VPUNPCKLQDQ_X2_X2_X10 BYTE $0xC5; BYTE $0x69; BYTE $0x6C; BYTE $0xD2
-#define VPUNPCKHQDQ_X3_X10_X2 BYTE $0xC4; BYTE $0xC1; BYTE $0x61; BYTE $0x6D; BYTE $0xD2
-#define VPUNPCKHQDQ_X8_X10_X3 BYTE $0xC4; BYTE $0xC1; BYTE $0x39; BYTE $0x6D; BYTE $0xDA
-#define VPUNPCKHQDQ_X6_X10_X6 BYTE $0xC4; BYTE $0xC1; BYTE $0x49; BYTE $0x6D; BYTE $0xF2
-#define VPUNPCKHQDQ_X7_X10_X7 BYTE $0xC4; BYTE $0xC1; BYTE $0x41; BYTE $0x6D; BYTE $0xFA
-
-// shuffle X2 and X6 using the temp registers X8, X9, X10
+#define VPUNPCKLQDQ_X2_X2_X15 BYTE $0xC5; BYTE $0x69; BYTE $0x6C; BYTE $0xFA
+#define VPUNPCKLQDQ_X3_X3_X15 BYTE $0xC5; BYTE $0x61; BYTE $0x6C; BYTE $0xFB
+#define VPUNPCKLQDQ_X7_X7_X15 BYTE $0xC5; BYTE $0x41; BYTE $0x6C; BYTE $0xFF
+#define VPUNPCKLQDQ_X13_X13_X15 BYTE $0xC4; BYTE $0x41; BYTE $0x11; BYTE $0x6C; BYTE $0xFD
+#define VPUNPCKLQDQ_X14_X14_X15 BYTE $0xC4; BYTE $0x41; BYTE $0x09; BYTE $0x6C; BYTE $0xFE
+
+#define VPUNPCKHQDQ_X15_X2_X2 BYTE $0xC4; BYTE $0xC1; BYTE $0x69; BYTE $0x6D; BYTE $0xD7
+#define VPUNPCKHQDQ_X15_X3_X3 BYTE $0xC4; BYTE $0xC1; BYTE $0x61; BYTE $0x6D; BYTE $0xDF
+#define VPUNPCKHQDQ_X15_X6_X6 BYTE $0xC4; BYTE $0xC1; BYTE $0x49; BYTE $0x6D; BYTE $0xF7
+#define VPUNPCKHQDQ_X15_X7_X7 BYTE $0xC4; BYTE $0xC1; BYTE $0x41; BYTE $0x6D; BYTE $0xFF
+#define VPUNPCKHQDQ_X15_X3_X2 BYTE $0xC4; BYTE $0xC1; BYTE $0x61; BYTE $0x6D; BYTE $0xD7
+#define VPUNPCKHQDQ_X15_X7_X6 BYTE $0xC4; BYTE $0xC1; BYTE $0x41; BYTE $0x6D; BYTE $0xF7
+#define VPUNPCKHQDQ_X15_X13_X3 BYTE $0xC4; BYTE $0xC1; BYTE $0x11; BYTE $0x6D; BYTE $0xDF
+#define VPUNPCKHQDQ_X15_X13_X7 BYTE $0xC4; BYTE $0xC1; BYTE $0x11; BYTE $0x6D; BYTE $0xFF
+
#define SHUFFLE_AVX() \
- VMOVDQA X4, X9; \
- VMOVDQA X5, X4; \
- VMOVDQA X9, X5; \
- VMOVDQA X6, X8; \
- VPUNPCKLQDQ_X8_X8_X10; \
- VPUNPCKHQDQ_X7_X10_X6; \
- VPUNPCKLQDQ_X7_X7_X10; \
- VPUNPCKHQDQ_X8_X10_X7; \
- VPUNPCKLQDQ_X3_X3_X10; \
- VMOVDQA X2, X9; \
- VPUNPCKHQDQ_X2_X10_X2; \
- VPUNPCKLQDQ_X9_X9_X10; \
- VPUNPCKHQDQ_X3_X10_X3; \
-
-// inverse shuffle X2 and X6 using the temp registers X8, X9, X10
+ VMOVDQA X6, X13; \
+ VMOVDQA X2, X14; \
+ VMOVDQA X4, X6; \
+ VPUNPCKLQDQ_X13_X13_X15; \
+ VMOVDQA X5, X4; \
+ VMOVDQA X6, X5; \
+ VPUNPCKHQDQ_X15_X7_X6; \
+ VPUNPCKLQDQ_X7_X7_X15; \
+ VPUNPCKHQDQ_X15_X13_X7; \
+ VPUNPCKLQDQ_X3_X3_X15; \
+ VPUNPCKHQDQ_X15_X2_X2; \
+ VPUNPCKLQDQ_X14_X14_X15; \
+ VPUNPCKHQDQ_X15_X3_X3; \
+
#define SHUFFLE_AVX_INV() \
- VMOVDQA X4, X9; \
- VMOVDQA X5, X4; \
- VMOVDQA X9, X5; \
- VMOVDQA X2, X8; \
- VPUNPCKLQDQ_X2_X2_X10; \
- VPUNPCKHQDQ_X3_X10_X2; \
- VPUNPCKLQDQ_X3_X3_X10; \
- VPUNPCKHQDQ_X8_X10_X3; \
- VPUNPCKLQDQ_X7_X7_X10; \
- VMOVDQA X6, X9; \
- VPUNPCKHQDQ_X6_X10_X6; \
- VPUNPCKLQDQ_X9_X9_X10; \
- VPUNPCKHQDQ_X7_X10_X7; \
+ VMOVDQA X2, X13; \
+ VMOVDQA X4, X14; \
+ VPUNPCKLQDQ_X2_X2_X15; \
+ VMOVDQA X5, X4; \
+ VPUNPCKHQDQ_X15_X3_X2; \
+ VMOVDQA X14, X5; \
+ VPUNPCKLQDQ_X3_X3_X15; \
+ VMOVDQA X6, X14; \
+ VPUNPCKHQDQ_X15_X13_X3; \
+ VPUNPCKLQDQ_X7_X7_X15; \
+ VPUNPCKHQDQ_X15_X6_X6; \
+ VPUNPCKLQDQ_X14_X14_X15; \
+ VPUNPCKHQDQ_X15_X7_X7; \
#define HALF_ROUND_AVX(v0, v1, v2, v3, v4, v5, v6, v7, m0, m1, m2, m3, t0, c40, c48) \
VPADDQ m0, v0, v0; \
@@ -294,28 +448,133 @@ noinc:
VPSRLQ $63, v3, v3; \
VPXOR t0, v3, v3
-// unfortunately the BYTE representation of VPINSRQ must be used
-#define VPINSRQ_1_R10_X8_X8 BYTE $0xC4; BYTE $0x43; BYTE $0xB9; BYTE $0x22; BYTE $0xC2; BYTE $0x01
-#define VPINSRQ_1_R11_X9_X9 BYTE $0xC4; BYTE $0x43; BYTE $0xB1; BYTE $0x22; BYTE $0xCB; BYTE $0x01
-#define VPINSRQ_1_R12_X10_X10 BYTE $0xC4; BYTE $0x43; BYTE $0xA9; BYTE $0x22; BYTE $0xD4; BYTE $0x01
-#define VPINSRQ_1_R13_X11_X11 BYTE $0xC4; BYTE $0x43; BYTE $0xA1; BYTE $0x22; BYTE $0xDD; BYTE $0x01
-
-#define VPINSRQ_1_R9_X8_X8 BYTE $0xC4; BYTE $0x43; BYTE $0xB9; BYTE $0x22; BYTE $0xC1; BYTE $0x01
-
-// load src into X8, X9, X10 and X11 using R10, R11, R12 and R13 for temp registers
-#define LOAD_MSG_AVX(src, i0, i1, i2, i3, i4, i5, i6, i7) \
- MOVQ i0*8(src), X8; \
- MOVQ i1*8(src), R10; \
- MOVQ i2*8(src), X9; \
- MOVQ i3*8(src), R11; \
- MOVQ i4*8(src), X10; \
- MOVQ i5*8(src), R12; \
- MOVQ i6*8(src), X11; \
- MOVQ i7*8(src), R13; \
- VPINSRQ_1_R10_X8_X8; \
- VPINSRQ_1_R11_X9_X9; \
- VPINSRQ_1_R12_X10_X10; \
- VPINSRQ_1_R13_X11_X11
+// load msg: X12 = (i0, i1), X13 = (i2, i3), X14 = (i4, i5), X15 = (i6, i7)
+// i0, i1, i2, i3, i4, i5, i6, i7 must not be 0
+#define LOAD_MSG_AVX(i0, i1, i2, i3, i4, i5, i6, i7) \
+ VMOVQ_SI_X12(i0*8); \
+ VMOVQ_SI_X13(i2*8); \
+ VMOVQ_SI_X14(i4*8); \
+ VMOVQ_SI_X15(i6*8); \
+ VPINSRQ_1_SI_X12(i1*8); \
+ VPINSRQ_1_SI_X13(i3*8); \
+ VPINSRQ_1_SI_X14(i5*8); \
+ VPINSRQ_1_SI_X15(i7*8)
+
+// load msg: X12 = (0, 2), X13 = (4, 6), X14 = (1, 3), X15 = (5, 7)
+#define LOAD_MSG_AVX_0_2_4_6_1_3_5_7() \
+ VMOVQ_SI_X12_0; \
+ VMOVQ_SI_X13(4*8); \
+ VMOVQ_SI_X14(1*8); \
+ VMOVQ_SI_X15(5*8); \
+ VPINSRQ_1_SI_X12(2*8); \
+ VPINSRQ_1_SI_X13(6*8); \
+ VPINSRQ_1_SI_X14(3*8); \
+ VPINSRQ_1_SI_X15(7*8)
+
+// load msg: X12 = (1, 0), X13 = (11, 5), X14 = (12, 2), X15 = (7, 3)
+#define LOAD_MSG_AVX_1_0_11_5_12_2_7_3() \
+ VPSHUFD $0x4E, 0*8(SI), X12; \
+ VMOVQ_SI_X13(11*8); \
+ VMOVQ_SI_X14(12*8); \
+ VMOVQ_SI_X15(7*8); \
+ VPINSRQ_1_SI_X13(5*8); \
+ VPINSRQ_1_SI_X14(2*8); \
+ VPINSRQ_1_SI_X15(3*8)
+
+// load msg: X12 = (11, 12), X13 = (5, 15), X14 = (8, 0), X15 = (2, 13)
+#define LOAD_MSG_AVX_11_12_5_15_8_0_2_13() \
+ VMOVDQU 11*8(SI), X12; \
+ VMOVQ_SI_X13(5*8); \
+ VMOVQ_SI_X14(8*8); \
+ VMOVQ_SI_X15(2*8); \
+ VPINSRQ_1_SI_X13(15*8); \
+ VPINSRQ_1_SI_X14_0; \
+ VPINSRQ_1_SI_X15(13*8)
+
+// load msg: X12 = (2, 5), X13 = (4, 15), X14 = (6, 10), X15 = (0, 8)
+#define LOAD_MSG_AVX_2_5_4_15_6_10_0_8() \
+ VMOVQ_SI_X12(2*8); \
+ VMOVQ_SI_X13(4*8); \
+ VMOVQ_SI_X14(6*8); \
+ VMOVQ_SI_X15_0; \
+ VPINSRQ_1_SI_X12(5*8); \
+ VPINSRQ_1_SI_X13(15*8); \
+ VPINSRQ_1_SI_X14(10*8); \
+ VPINSRQ_1_SI_X15(8*8)
+
+// load msg: X12 = (9, 5), X13 = (2, 10), X14 = (0, 7), X15 = (4, 15)
+#define LOAD_MSG_AVX_9_5_2_10_0_7_4_15() \
+ VMOVQ_SI_X12(9*8); \
+ VMOVQ_SI_X13(2*8); \
+ VMOVQ_SI_X14_0; \
+ VMOVQ_SI_X15(4*8); \
+ VPINSRQ_1_SI_X12(5*8); \
+ VPINSRQ_1_SI_X13(10*8); \
+ VPINSRQ_1_SI_X14(7*8); \
+ VPINSRQ_1_SI_X15(15*8)
+
+// load msg: X12 = (2, 6), X13 = (0, 8), X14 = (12, 10), X15 = (11, 3)
+#define LOAD_MSG_AVX_2_6_0_8_12_10_11_3() \
+ VMOVQ_SI_X12(2*8); \
+ VMOVQ_SI_X13_0; \
+ VMOVQ_SI_X14(12*8); \
+ VMOVQ_SI_X15(11*8); \
+ VPINSRQ_1_SI_X12(6*8); \
+ VPINSRQ_1_SI_X13(8*8); \
+ VPINSRQ_1_SI_X14(10*8); \
+ VPINSRQ_1_SI_X15(3*8)
+
+// load msg: X12 = (0, 6), X13 = (9, 8), X14 = (7, 3), X15 = (2, 11)
+#define LOAD_MSG_AVX_0_6_9_8_7_3_2_11() \
+ MOVQ 0*8(SI), X12; \
+ VPSHUFD $0x4E, 8*8(SI), X13; \
+ MOVQ 7*8(SI), X14; \
+ MOVQ 2*8(SI), X15; \
+ VPINSRQ_1_SI_X12(6*8); \
+ VPINSRQ_1_SI_X14(3*8); \
+ VPINSRQ_1_SI_X15(11*8)
+
+// load msg: X12 = (6, 14), X13 = (11, 0), X14 = (15, 9), X15 = (3, 8)
+#define LOAD_MSG_AVX_6_14_11_0_15_9_3_8() \
+ MOVQ 6*8(SI), X12; \
+ MOVQ 11*8(SI), X13; \
+ MOVQ 15*8(SI), X14; \
+ MOVQ 3*8(SI), X15; \
+ VPINSRQ_1_SI_X12(14*8); \
+ VPINSRQ_1_SI_X13_0; \
+ VPINSRQ_1_SI_X14(9*8); \
+ VPINSRQ_1_SI_X15(8*8)
+
+// load msg: X12 = (5, 15), X13 = (8, 2), X14 = (0, 4), X15 = (6, 10)
+#define LOAD_MSG_AVX_5_15_8_2_0_4_6_10() \
+ MOVQ 5*8(SI), X12; \
+ MOVQ 8*8(SI), X13; \
+ MOVQ 0*8(SI), X14; \
+ MOVQ 6*8(SI), X15; \
+ VPINSRQ_1_SI_X12(15*8); \
+ VPINSRQ_1_SI_X13(2*8); \
+ VPINSRQ_1_SI_X14(4*8); \
+ VPINSRQ_1_SI_X15(10*8)
+
+// load msg: X12 = (12, 13), X13 = (1, 10), X14 = (2, 7), X15 = (4, 5)
+#define LOAD_MSG_AVX_12_13_1_10_2_7_4_5() \
+ VMOVDQU 12*8(SI), X12; \
+ MOVQ 1*8(SI), X13; \
+ MOVQ 2*8(SI), X14; \
+ VPINSRQ_1_SI_X13(10*8); \
+ VPINSRQ_1_SI_X14(7*8); \
+ VMOVDQU 4*8(SI), X15
+
+// load msg: X12 = (15, 9), X13 = (3, 13), X14 = (11, 14), X15 = (12, 0)
+#define LOAD_MSG_AVX_15_9_3_13_11_14_12_0() \
+ MOVQ 15*8(SI), X12; \
+ MOVQ 3*8(SI), X13; \
+ MOVQ 11*8(SI), X14; \
+ MOVQ 12*8(SI), X15; \
+ VPINSRQ_1_SI_X12(9*8); \
+ VPINSRQ_1_SI_X13(13*8); \
+ VPINSRQ_1_SI_X14(14*8); \
+ VPINSRQ_1_SI_X15_0
// func hashBlocksAVX(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte)
TEXT ·hashBlocksAVX(SB), 4, $288-48 // frame size = 272 + 16 byte alignment
@@ -331,15 +590,17 @@ TEXT ·hashBlocksAVX(SB), 4, $288-48 // frame size = 272 + 16 byte alignment
ANDQ $~15, R9
MOVQ R9, SP
- MOVOU ·AVX_c40<>(SB), X13
- MOVOU ·AVX_c48<>(SB), X14
+ VMOVDQU ·AVX_c40<>(SB), X0
+ VMOVDQU ·AVX_c48<>(SB), X1
+ VMOVDQA X0, X8
+ VMOVDQA X1, X9
VMOVDQU ·AVX_iv3<>(SB), X0
VMOVDQA X0, 0(SP)
XORQ CX, 0(SP) // 0(SP) = ·AVX_iv3 ^ (CX || 0)
- VMOVDQU 0(AX), X12
- VMOVDQU 16(AX), X15
+ VMOVDQU 0(AX), X10
+ VMOVDQU 16(AX), X11
VMOVDQU 32(AX), X2
VMOVDQU 48(AX), X3
@@ -353,124 +614,124 @@ loop:
INCQ R9
noinc:
- MOVQ R8, X8
- VPINSRQ_1_R9_X8_X8
+ VMOVQ_R8_X15
+ VPINSRQ_1_R9_X15
- VMOVDQA X12, X0
- VMOVDQA X15, X1
+ VMOVDQA X10, X0
+ VMOVDQA X11, X1
VMOVDQU ·AVX_iv0<>(SB), X4
VMOVDQU ·AVX_iv1<>(SB), X5
VMOVDQU ·AVX_iv2<>(SB), X6
- VPXOR X8, X6, X6
+ VPXOR X15, X6, X6
VMOVDQA 0(SP), X7
- LOAD_MSG_AVX(SI, 0, 2, 4, 6, 1, 3, 5, 7)
- VMOVDQA X8, 16(SP)
- VMOVDQA X9, 32(SP)
- VMOVDQA X10, 48(SP)
- VMOVDQA X11, 64(SP)
- HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14)
+ LOAD_MSG_AVX_0_2_4_6_1_3_5_7()
+ VMOVDQA X12, 16(SP)
+ VMOVDQA X13, 32(SP)
+ VMOVDQA X14, 48(SP)
+ VMOVDQA X15, 64(SP)
+ HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9)
SHUFFLE_AVX()
- LOAD_MSG_AVX(SI, 8, 10, 12, 14, 9, 11, 13, 15)
- VMOVDQA X8, 80(SP)
- VMOVDQA X9, 96(SP)
- VMOVDQA X10, 112(SP)
- VMOVDQA X11, 128(SP)
- HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14)
+ LOAD_MSG_AVX(8, 10, 12, 14, 9, 11, 13, 15)
+ VMOVDQA X12, 80(SP)
+ VMOVDQA X13, 96(SP)
+ VMOVDQA X14, 112(SP)
+ VMOVDQA X15, 128(SP)
+ HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9)
SHUFFLE_AVX_INV()
- LOAD_MSG_AVX(SI, 14, 4, 9, 13, 10, 8, 15, 6)
- VMOVDQA X8, 144(SP)
- VMOVDQA X9, 160(SP)
- VMOVDQA X10, 176(SP)
- VMOVDQA X11, 192(SP)
- HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14)
+ LOAD_MSG_AVX(14, 4, 9, 13, 10, 8, 15, 6)
+ VMOVDQA X12, 144(SP)
+ VMOVDQA X13, 160(SP)
+ VMOVDQA X14, 176(SP)
+ VMOVDQA X15, 192(SP)
+ HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9)
SHUFFLE_AVX()
- LOAD_MSG_AVX(SI, 1, 0, 11, 5, 12, 2, 7, 3)
- VMOVDQA X8, 208(SP)
- VMOVDQA X9, 224(SP)
- VMOVDQA X10, 240(SP)
- VMOVDQA X11, 256(SP)
- HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14)
+ LOAD_MSG_AVX_1_0_11_5_12_2_7_3()
+ VMOVDQA X12, 208(SP)
+ VMOVDQA X13, 224(SP)
+ VMOVDQA X14, 240(SP)
+ VMOVDQA X15, 256(SP)
+ HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9)
SHUFFLE_AVX_INV()
- LOAD_MSG_AVX(SI, 11, 12, 5, 15, 8, 0, 2, 13)
- HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14)
+ LOAD_MSG_AVX_11_12_5_15_8_0_2_13()
+ HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9)
SHUFFLE_AVX()
- LOAD_MSG_AVX(SI, 10, 3, 7, 9, 14, 6, 1, 4)
- HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14)
+ LOAD_MSG_AVX(10, 3, 7, 9, 14, 6, 1, 4)
+ HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9)
SHUFFLE_AVX_INV()
- LOAD_MSG_AVX(SI, 7, 3, 13, 11, 9, 1, 12, 14)
- HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14)
+ LOAD_MSG_AVX(7, 3, 13, 11, 9, 1, 12, 14)
+ HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9)
SHUFFLE_AVX()
- LOAD_MSG_AVX(SI, 2, 5, 4, 15, 6, 10, 0, 8)
- HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14)
+ LOAD_MSG_AVX_2_5_4_15_6_10_0_8()
+ HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9)
SHUFFLE_AVX_INV()
- LOAD_MSG_AVX(SI, 9, 5, 2, 10, 0, 7, 4, 15)
- HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14)
+ LOAD_MSG_AVX_9_5_2_10_0_7_4_15()
+ HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9)
SHUFFLE_AVX()
- LOAD_MSG_AVX(SI, 14, 11, 6, 3, 1, 12, 8, 13)
- HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14)
+ LOAD_MSG_AVX(14, 11, 6, 3, 1, 12, 8, 13)
+ HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9)
SHUFFLE_AVX_INV()
- LOAD_MSG_AVX(SI, 2, 6, 0, 8, 12, 10, 11, 3)
- HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14)
+ LOAD_MSG_AVX_2_6_0_8_12_10_11_3()
+ HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9)
SHUFFLE_AVX()
- LOAD_MSG_AVX(SI, 4, 7, 15, 1, 13, 5, 14, 9)
- HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14)
+ LOAD_MSG_AVX(4, 7, 15, 1, 13, 5, 14, 9)
+ HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9)
SHUFFLE_AVX_INV()
- LOAD_MSG_AVX(SI, 12, 1, 14, 4, 5, 15, 13, 10)
- HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14)
+ LOAD_MSG_AVX(12, 1, 14, 4, 5, 15, 13, 10)
+ HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9)
SHUFFLE_AVX()
- LOAD_MSG_AVX(SI, 0, 6, 9, 8, 7, 3, 2, 11)
- HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14)
+ LOAD_MSG_AVX_0_6_9_8_7_3_2_11()
+ HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9)
SHUFFLE_AVX_INV()
- LOAD_MSG_AVX(SI, 13, 7, 12, 3, 11, 14, 1, 9)
- HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14)
+ LOAD_MSG_AVX(13, 7, 12, 3, 11, 14, 1, 9)
+ HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9)
SHUFFLE_AVX()
- LOAD_MSG_AVX(SI, 5, 15, 8, 2, 0, 4, 6, 10)
- HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14)
+ LOAD_MSG_AVX_5_15_8_2_0_4_6_10()
+ HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9)
SHUFFLE_AVX_INV()
- LOAD_MSG_AVX(SI, 6, 14, 11, 0, 15, 9, 3, 8)
- HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14)
+ LOAD_MSG_AVX_6_14_11_0_15_9_3_8()
+ HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9)
SHUFFLE_AVX()
- LOAD_MSG_AVX(SI, 12, 13, 1, 10, 2, 7, 4, 5)
- HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14)
+ LOAD_MSG_AVX_12_13_1_10_2_7_4_5()
+ HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9)
SHUFFLE_AVX_INV()
- LOAD_MSG_AVX(SI, 10, 8, 7, 1, 2, 4, 6, 5)
- HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14)
+ LOAD_MSG_AVX(10, 8, 7, 1, 2, 4, 6, 5)
+ HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9)
SHUFFLE_AVX()
- LOAD_MSG_AVX(SI, 15, 9, 3, 13, 11, 14, 12, 0)
- HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14)
+ LOAD_MSG_AVX_15_9_3_13_11_14_12_0()
+ HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9)
SHUFFLE_AVX_INV()
- HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, 16(SP), 32(SP), 48(SP), 64(SP), X11, X13, X14)
+ HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, 16(SP), 32(SP), 48(SP), 64(SP), X15, X8, X9)
SHUFFLE_AVX()
- HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, 80(SP), 96(SP), 112(SP), 128(SP), X11, X13, X14)
+ HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, 80(SP), 96(SP), 112(SP), 128(SP), X15, X8, X9)
SHUFFLE_AVX_INV()
- HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, 144(SP), 160(SP), 176(SP), 192(SP), X11, X13, X14)
+ HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, 144(SP), 160(SP), 176(SP), 192(SP), X15, X8, X9)
SHUFFLE_AVX()
- HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, 208(SP), 224(SP), 240(SP), 256(SP), X11, X13, X14)
+ HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, 208(SP), 224(SP), 240(SP), 256(SP), X15, X8, X9)
SHUFFLE_AVX_INV()
- VMOVDQU 32(AX), X10
- VMOVDQU 48(AX), X11
- VPXOR X0, X12, X12
- VPXOR X1, X15, X15
- VPXOR X2, X10, X10
- VPXOR X3, X11, X11
- VPXOR X4, X12, X12
- VPXOR X5, X15, X15
- VPXOR X6, X10, X2
- VPXOR X7, X11, X3
+ VMOVDQU 32(AX), X14
+ VMOVDQU 48(AX), X15
+ VPXOR X0, X10, X10
+ VPXOR X1, X11, X11
+ VPXOR X2, X14, X14
+ VPXOR X3, X15, X15
+ VPXOR X4, X10, X10
+ VPXOR X5, X11, X11
+ VPXOR X6, X14, X2
+ VPXOR X7, X15, X3
VMOVDQU X2, 32(AX)
VMOVDQU X3, 48(AX)
@@ -478,12 +739,11 @@ noinc:
SUBQ $128, DI
JNE loop
- VMOVDQU X12, 0(AX)
- VMOVDQU X15, 16(AX)
+ VMOVDQU X10, 0(AX)
+ VMOVDQU X11, 16(AX)
MOVQ R8, 0(BX)
MOVQ R9, 8(BX)
-
VZEROUPPER
MOVQ BP, SP
diff --git a/vendor/golang.org/x/crypto/blake2b/register.go b/vendor/golang.org/x/crypto/blake2b/register.go
new file mode 100644
index 000000000..efd689af4
--- /dev/null
+++ b/vendor/golang.org/x/crypto/blake2b/register.go
@@ -0,0 +1,32 @@
+// 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.
+
+// +build go1.9
+
+package blake2b
+
+import (
+ "crypto"
+ "hash"
+)
+
+func init() {
+ newHash256 := func() hash.Hash {
+ h, _ := New256(nil)
+ return h
+ }
+ newHash384 := func() hash.Hash {
+ h, _ := New384(nil)
+ return h
+ }
+
+ newHash512 := func() hash.Hash {
+ h, _ := New512(nil)
+ return h
+ }
+
+ crypto.RegisterHash(crypto.BLAKE2b_256, newHash256)
+ crypto.RegisterHash(crypto.BLAKE2b_384, newHash384)
+ crypto.RegisterHash(crypto.BLAKE2b_512, newHash512)
+}
diff --git a/vendor/golang.org/x/crypto/blake2s/register.go b/vendor/golang.org/x/crypto/blake2s/register.go
new file mode 100644
index 000000000..d277459a1
--- /dev/null
+++ b/vendor/golang.org/x/crypto/blake2s/register.go
@@ -0,0 +1,21 @@
+// 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.
+
+// +build go1.9
+
+package blake2s
+
+import (
+ "crypto"
+ "hash"
+)
+
+func init() {
+ newHash256 := func() hash.Hash {
+ h, _ := New256(nil)
+ return h
+ }
+
+ crypto.RegisterHash(crypto.BLAKE2s_256, newHash256)
+}
diff --git a/vendor/golang.org/x/crypto/cryptobyte/asn1.go b/vendor/golang.org/x/crypto/cryptobyte/asn1.go
new file mode 100644
index 000000000..166e22d7b
--- /dev/null
+++ b/vendor/golang.org/x/crypto/cryptobyte/asn1.go
@@ -0,0 +1,604 @@
+// 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 cryptobyte
+
+import (
+ "encoding/asn1"
+ "fmt"
+ "math/big"
+ "reflect"
+ "time"
+)
+
+// This file contains ASN.1-related methods for String and Builder.
+
+// Tag represents an ASN.1 tag number and class (together also referred to as
+// identifier octets). Methods in this package only support the low-tag-number
+// form, i.e. a single identifier octet with bits 7-8 encoding the class and
+// bits 1-6 encoding the tag number.
+type Tag uint8
+
+// Contructed returns t with the context-specific class bit set.
+func (t Tag) ContextSpecific() Tag { return t | 0x80 }
+
+// Contructed returns t with the constructed class bit set.
+func (t Tag) Constructed() Tag { return t | 0x20 }
+
+// Builder
+
+// AddASN1Int64 appends a DER-encoded ASN.1 INTEGER.
+func (b *Builder) AddASN1Int64(v int64) {
+ b.addASN1Signed(asn1.TagInteger, v)
+}
+
+// AddASN1Enum appends a DER-encoded ASN.1 ENUMERATION.
+func (b *Builder) AddASN1Enum(v int64) {
+ b.addASN1Signed(asn1.TagEnum, v)
+}
+
+func (b *Builder) addASN1Signed(tag Tag, v int64) {
+ b.AddASN1(tag, func(c *Builder) {
+ length := 1
+ for i := v; i >= 0x80 || i < -0x80; i >>= 8 {
+ length++
+ }
+
+ for ; length > 0; length-- {
+ i := v >> uint((length-1)*8) & 0xff
+ c.AddUint8(uint8(i))
+ }
+ })
+}
+
+// AddASN1Uint64 appends a DER-encoded ASN.1 INTEGER.
+func (b *Builder) AddASN1Uint64(v uint64) {
+ b.AddASN1(asn1.TagInteger, func(c *Builder) {
+ length := 1
+ for i := v; i >= 0x80; i >>= 8 {
+ length++
+ }
+
+ for ; length > 0; length-- {
+ i := v >> uint((length-1)*8) & 0xff
+ c.AddUint8(uint8(i))
+ }
+ })
+}
+
+// AddASN1BigInt appends a DER-encoded ASN.1 INTEGER.
+func (b *Builder) AddASN1BigInt(n *big.Int) {
+ if b.err != nil {
+ return
+ }
+
+ b.AddASN1(asn1.TagInteger, func(c *Builder) {
+ if n.Sign() < 0 {
+ // A negative number has to be converted to two's-complement form. So we
+ // invert and subtract 1. If the most-significant-bit isn't set then
+ // we'll need to pad the beginning with 0xff in order to keep the number
+ // negative.
+ nMinus1 := new(big.Int).Neg(n)
+ nMinus1.Sub(nMinus1, bigOne)
+ bytes := nMinus1.Bytes()
+ for i := range bytes {
+ bytes[i] ^= 0xff
+ }
+ if bytes[0]&0x80 == 0 {
+ c.add(0xff)
+ }
+ c.add(bytes...)
+ } else if n.Sign() == 0 {
+ c.add(0)
+ } else {
+ bytes := n.Bytes()
+ if bytes[0]&0x80 != 0 {
+ c.add(0)
+ }
+ c.add(bytes...)
+ }
+ })
+}
+
+// AddASN1OctetString appends a DER-encoded ASN.1 OCTET STRING.
+func (b *Builder) AddASN1OctetString(bytes []byte) {
+ b.AddASN1(asn1.TagOctetString, func(c *Builder) {
+ c.AddBytes(bytes)
+ })
+}
+
+const generalizedTimeFormatStr = "20060102150405Z0700"
+
+// AddASN1GeneralizedTime appends a DER-encoded ASN.1 GENERALIZEDTIME.
+func (b *Builder) AddASN1GeneralizedTime(t time.Time) {
+ if t.Year() < 0 || t.Year() > 9999 {
+ b.err = fmt.Errorf("cryptobyte: cannot represent %v as a GeneralizedTime", t)
+ return
+ }
+ b.AddASN1(asn1.TagGeneralizedTime, func(c *Builder) {
+ c.AddBytes([]byte(t.Format(generalizedTimeFormatStr)))
+ })
+}
+
+// AddASN1BitString appends a DER-encoded ASN.1 BIT STRING.
+func (b *Builder) AddASN1BitString(s asn1.BitString) {
+ // TODO(martinkr): Implement.
+ b.MarshalASN1(s)
+}
+
+// MarshalASN1 calls asn1.Marshal on its input and appends the result if
+// successful or records an error if one occurred.
+func (b *Builder) MarshalASN1(v interface{}) {
+ // NOTE(martinkr): This is somewhat of a hack to allow propagation of
+ // asn1.Marshal errors into Builder.err. N.B. if you call MarshalASN1 with a
+ // value embedded into a struct, its tag information is lost.
+ if b.err != nil {
+ return
+ }
+ bytes, err := asn1.Marshal(v)
+ if err != nil {
+ b.err = err
+ return
+ }
+ b.AddBytes(bytes)
+}
+
+// AddASN1 appends an ASN.1 object. The object is prefixed with the given tag.
+// Tags greater than 30 are not supported and result in an error (i.e.
+// low-tag-number form only). The child builder passed to the
+// BuilderContinuation can be used to build the content of the ASN.1 object.
+func (b *Builder) AddASN1(tag Tag, f BuilderContinuation) {
+ if b.err != nil {
+ return
+ }
+ // Identifiers with the low five bits set indicate high-tag-number format
+ // (two or more octets), which we don't support.
+ if tag&0x1f == 0x1f {
+ b.err = fmt.Errorf("cryptobyte: high-tag number identifier octects not supported: 0x%x", tag)
+ return
+ }
+ b.AddUint8(uint8(tag))
+ b.addLengthPrefixed(1, true, f)
+}
+
+// String
+
+var bigIntType = reflect.TypeOf((*big.Int)(nil)).Elem()
+
+// ReadASN1Integer decodes an ASN.1 INTEGER into out and advances. If out does
+// not point to an integer or to a big.Int, it panics. It returns true on
+// success and false on error.
+func (s *String) ReadASN1Integer(out interface{}) bool {
+ if reflect.TypeOf(out).Kind() != reflect.Ptr {
+ panic("out is not a pointer")
+ }
+ switch reflect.ValueOf(out).Elem().Kind() {
+ case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
+ var i int64
+ if !s.readASN1Int64(&i) || reflect.ValueOf(out).Elem().OverflowInt(i) {
+ return false
+ }
+ reflect.ValueOf(out).Elem().SetInt(i)
+ return true
+ case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
+ var u uint64
+ if !s.readASN1Uint64(&u) || reflect.ValueOf(out).Elem().OverflowUint(u) {
+ return false
+ }
+ reflect.ValueOf(out).Elem().SetUint(u)
+ return true
+ case reflect.Struct:
+ if reflect.TypeOf(out).Elem() == bigIntType {
+ return s.readASN1BigInt(out.(*big.Int))
+ }
+ }
+ panic("out does not point to an integer type")
+}
+
+func checkASN1Integer(bytes []byte) bool {
+ if len(bytes) == 0 {
+ // An INTEGER is encoded with at least one octet.
+ return false
+ }
+ if len(bytes) == 1 {
+ return true
+ }
+ if bytes[0] == 0 && bytes[1]&0x80 == 0 || bytes[0] == 0xff && bytes[1]&0x80 == 0x80 {
+ // Value is not minimally encoded.
+ return false
+ }
+ return true
+}
+
+var bigOne = big.NewInt(1)
+
+func (s *String) readASN1BigInt(out *big.Int) bool {
+ var bytes String
+ if !s.ReadASN1(&bytes, asn1.TagInteger) || !checkASN1Integer(bytes) {
+ return false
+ }
+ if bytes[0]&0x80 == 0x80 {
+ // Negative number.
+ neg := make([]byte, len(bytes))
+ for i, b := range bytes {
+ neg[i] = ^b
+ }
+ out.SetBytes(neg)
+ out.Add(out, bigOne)
+ out.Neg(out)
+ } else {
+ out.SetBytes(bytes)
+ }
+ return true
+}
+
+func (s *String) readASN1Int64(out *int64) bool {
+ var bytes String
+ if !s.ReadASN1(&bytes, asn1.TagInteger) || !checkASN1Integer(bytes) || !asn1Signed(out, bytes) {
+ return false
+ }
+ return true
+}
+
+func asn1Signed(out *int64, n []byte) bool {
+ length := len(n)
+ if length > 8 {
+ return false
+ }
+ for i := 0; i < length; i++ {
+ *out <<= 8
+ *out |= int64(n[i])
+ }
+ // Shift up and down in order to sign extend the result.
+ *out <<= 64 - uint8(length)*8
+ *out >>= 64 - uint8(length)*8
+ return true
+}
+
+func (s *String) readASN1Uint64(out *uint64) bool {
+ var bytes String
+ if !s.ReadASN1(&bytes, asn1.TagInteger) || !checkASN1Integer(bytes) || !asn1Unsigned(out, bytes) {
+ return false
+ }
+ return true
+}
+
+func asn1Unsigned(out *uint64, n []byte) bool {
+ length := len(n)
+ if length > 9 || length == 9 && n[0] != 0 {
+ // Too large for uint64.
+ return false
+ }
+ if n[0]&0x80 != 0 {
+ // Negative number.
+ return false
+ }
+ for i := 0; i < length; i++ {
+ *out <<= 8
+ *out |= uint64(n[i])
+ }
+ return true
+}
+
+// ReadASN1Enum decodes an ASN.1 ENUMERATION into out and advances. It returns
+// true on success and false on error.
+func (s *String) ReadASN1Enum(out *int) bool {
+ var bytes String
+ var i int64
+ if !s.ReadASN1(&bytes, asn1.TagEnum) || !checkASN1Integer(bytes) || !asn1Signed(&i, bytes) {
+ return false
+ }
+ if int64(int(i)) != i {
+ return false
+ }
+ *out = int(i)
+ return true
+}
+
+func (s *String) readBase128Int(out *int) bool {
+ ret := 0
+ for i := 0; len(*s) > 0; i++ {
+ if i == 4 {
+ return false
+ }
+ ret <<= 7
+ b := s.read(1)[0]
+ ret |= int(b & 0x7f)
+ if b&0x80 == 0 {
+ *out = ret
+ return true
+ }
+ }
+ return false // truncated
+}
+
+// ReadASN1ObjectIdentifier decodes an ASN.1 OBJECT IDENTIFIER into out and
+// advances. It returns true on success and false on error.
+func (s *String) ReadASN1ObjectIdentifier(out *asn1.ObjectIdentifier) bool {
+ var bytes String
+ if !s.ReadASN1(&bytes, asn1.TagOID) || len(bytes) == 0 {
+ return false
+ }
+
+ // In the worst case, we get two elements from the first byte (which is
+ // encoded differently) and then every varint is a single byte long.
+ components := make([]int, len(bytes)+1)
+
+ // The first varint is 40*value1 + value2:
+ // According to this packing, value1 can take the values 0, 1 and 2 only.
+ // When value1 = 0 or value1 = 1, then value2 is <= 39. When value1 = 2,
+ // then there are no restrictions on value2.
+ var v int
+ if !bytes.readBase128Int(&v) {
+ return false
+ }
+ if v < 80 {
+ components[0] = v / 40
+ components[1] = v % 40
+ } else {
+ components[0] = 2
+ components[1] = v - 80
+ }
+
+ i := 2
+ for ; len(bytes) > 0; i++ {
+ if !bytes.readBase128Int(&v) {
+ return false
+ }
+ components[i] = v
+ }
+ *out = components[:i]
+ return true
+}
+
+// ReadASN1GeneralizedTime decodes an ASN.1 GENERALIZEDTIME into out and
+// advances. It returns true on success and false on error.
+func (s *String) ReadASN1GeneralizedTime(out *time.Time) bool {
+ var bytes String
+ if !s.ReadASN1(&bytes, asn1.TagGeneralizedTime) {
+ return false
+ }
+ t := string(bytes)
+ res, err := time.Parse(generalizedTimeFormatStr, t)
+ if err != nil {
+ return false
+ }
+ if serialized := res.Format(generalizedTimeFormatStr); serialized != t {
+ return false
+ }
+ *out = res
+ return true
+}
+
+// ReadASN1BitString decodes an ASN.1 BIT STRING into out and advances. It
+// returns true on success and false on error.
+func (s *String) ReadASN1BitString(out *asn1.BitString) bool {
+ var bytes String
+ if !s.ReadASN1(&bytes, asn1.TagBitString) || len(bytes) == 0 {
+ return false
+ }
+
+ paddingBits := uint8(bytes[0])
+ bytes = bytes[1:]
+ if paddingBits > 7 ||
+ len(bytes) == 0 && paddingBits != 0 ||
+ len(bytes) > 0 && bytes[len(bytes)-1]&(1<<paddingBits-1) != 0 {
+ return false
+ }
+
+ out.BitLength = len(bytes)*8 - int(paddingBits)
+ out.Bytes = bytes
+ return true
+}
+
+// ReadASN1Bytes reads the contents of a DER-encoded ASN.1 element (not including
+// tag and length bytes) into out, and advances. The element must match the
+// given tag. It returns true on success and false on error.
+func (s *String) ReadASN1Bytes(out *[]byte, tag Tag) bool {
+ return s.ReadASN1((*String)(out), tag)
+}
+
+// ReadASN1 reads the contents of a DER-encoded ASN.1 element (not including
+// tag and length bytes) into out, and advances. The element must match the
+// given tag. It returns true on success and false on error.
+//
+// Tags greater than 30 are not supported (i.e. low-tag-number format only).
+func (s *String) ReadASN1(out *String, tag Tag) bool {
+ var t Tag
+ if !s.ReadAnyASN1(out, &t) || t != tag {
+ return false
+ }
+ return true
+}
+
+// ReadASN1Element reads the contents of a DER-encoded ASN.1 element (including
+// tag and length bytes) into out, and advances. The element must match the
+// given tag. It returns true on success and false on error.
+//
+// Tags greater than 30 are not supported (i.e. low-tag-number format only).
+func (s *String) ReadASN1Element(out *String, tag Tag) bool {
+ var t Tag
+ if !s.ReadAnyASN1Element(out, &t) || t != tag {
+ return false
+ }
+ return true
+}
+
+// ReadAnyASN1 reads the contents of a DER-encoded ASN.1 element (not including
+// tag and length bytes) into out, sets outTag to its tag, and advances. It
+// returns true on success and false on error.
+//
+// Tags greater than 30 are not supported (i.e. low-tag-number format only).
+func (s *String) ReadAnyASN1(out *String, outTag *Tag) bool {
+ return s.readASN1(out, outTag, true /* skip header */)
+}
+
+// ReadAnyASN1Element reads the contents of a DER-encoded ASN.1 element
+// (including tag and length bytes) into out, sets outTag to is tag, and
+// advances. It returns true on success and false on error.
+//
+// Tags greater than 30 are not supported (i.e. low-tag-number format only).
+func (s *String) ReadAnyASN1Element(out *String, outTag *Tag) bool {
+ return s.readASN1(out, outTag, false /* include header */)
+}
+
+// PeekASN1Tag returns true if the next ASN.1 value on the string starts with
+// the given tag.
+func (s String) PeekASN1Tag(tag Tag) bool {
+ if len(s) == 0 {
+ return false
+ }
+ return Tag(s[0]) == tag
+}
+
+// ReadOptionalASN1 attempts to read the contents of a DER-encoded ASN.Element
+// (not including tag and length bytes) tagged with the given tag into out. It
+// stores whether an element with the tag was found in outPresent, unless
+// outPresent is nil. It returns true on success and false on error.
+func (s *String) ReadOptionalASN1(out *String, outPresent *bool, tag Tag) bool {
+ present := s.PeekASN1Tag(tag)
+ if outPresent != nil {
+ *outPresent = present
+ }
+ if present && !s.ReadASN1(out, tag) {
+ return false
+ }
+ return true
+}
+
+// ReadOptionalASN1Integer attempts to read an optional ASN.1 INTEGER
+// explicitly tagged with tag into out and advances. If no element with a
+// matching tag is present, it writes defaultValue into out instead. If out
+// does not point to an integer or to a big.Int, it panics. It returns true on
+// success and false on error.
+func (s *String) ReadOptionalASN1Integer(out interface{}, tag Tag, defaultValue interface{}) bool {
+ if reflect.TypeOf(out).Kind() != reflect.Ptr {
+ panic("out is not a pointer")
+ }
+ var present bool
+ var i String
+ if !s.ReadOptionalASN1(&i, &present, tag) {
+ return false
+ }
+ if !present {
+ switch reflect.ValueOf(out).Elem().Kind() {
+ case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64,
+ reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
+ reflect.ValueOf(out).Elem().Set(reflect.ValueOf(defaultValue))
+ case reflect.Struct:
+ if reflect.TypeOf(out).Elem() != bigIntType {
+ panic("invalid integer type")
+ }
+ if reflect.TypeOf(defaultValue).Kind() != reflect.Ptr ||
+ reflect.TypeOf(defaultValue).Elem() != bigIntType {
+ panic("out points to big.Int, but defaultValue does not")
+ }
+ out.(*big.Int).Set(defaultValue.(*big.Int))
+ default:
+ panic("invalid integer type")
+ }
+ return true
+ }
+ if !i.ReadASN1Integer(out) || !i.Empty() {
+ return false
+ }
+ return true
+}
+
+// ReadOptionalASN1OctetString attempts to read an optional ASN.1 OCTET STRING
+// explicitly tagged with tag into out and advances. If no element with a
+// matching tag is present, it writes defaultValue into out instead. It returns
+// true on success and false on error.
+func (s *String) ReadOptionalASN1OctetString(out *[]byte, outPresent *bool, tag Tag) bool {
+ var present bool
+ var child String
+ if !s.ReadOptionalASN1(&child, &present, tag) {
+ return false
+ }
+ if outPresent != nil {
+ *outPresent = present
+ }
+ if present {
+ var oct String
+ if !child.ReadASN1(&oct, asn1.TagOctetString) || !child.Empty() {
+ return false
+ }
+ *out = oct
+ } else {
+ *out = nil
+ }
+ return true
+}
+
+func (s *String) readASN1(out *String, outTag *Tag, skipHeader bool) bool {
+ if len(*s) < 2 {
+ return false
+ }
+ tag, lenByte := (*s)[0], (*s)[1]
+
+ if tag&0x1f == 0x1f {
+ // ITU-T X.690 section 8.1.2
+ //
+ // An identifier octet with a tag part of 0x1f indicates a high-tag-number
+ // form identifier with two or more octets. We only support tags less than
+ // 31 (i.e. low-tag-number form, single octet identifier).
+ return false
+ }
+
+ if outTag != nil {
+ *outTag = Tag(tag)
+ }
+
+ // ITU-T X.690 section 8.1.3
+ //
+ // Bit 8 of the first length byte indicates whether the length is short- or
+ // long-form.
+ var length, headerLen uint32 // length includes headerLen
+ if lenByte&0x80 == 0 {
+ // Short-form length (section 8.1.3.4), encoded in bits 1-7.
+ length = uint32(lenByte) + 2
+ headerLen = 2
+ } else {
+ // Long-form length (section 8.1.3.5). Bits 1-7 encode the number of octets
+ // used to encode the length.
+ lenLen := lenByte & 0x7f
+ var len32 uint32
+
+ if lenLen == 0 || lenLen > 4 || len(*s) < int(2+lenLen) {
+ return false
+ }
+
+ lenBytes := String((*s)[2 : 2+lenLen])
+ if !lenBytes.readUnsigned(&len32, int(lenLen)) {
+ return false
+ }
+
+ // ITU-T X.690 section 10.1 (DER length forms) requires encoding the length
+ // with the minimum number of octets.
+ if len32 < 128 {
+ // Length should have used short-form encoding.
+ return false
+ }
+ if len32>>((lenLen-1)*8) == 0 {
+ // Leading octet is 0. Length should have been at least one byte shorter.
+ return false
+ }
+
+ headerLen = 2 + uint32(lenLen)
+ if headerLen+len32 < len32 {
+ // Overflow.
+ return false
+ }
+ length = headerLen + len32
+ }
+
+ if uint32(int(length)) != length || !s.ReadBytes((*[]byte)(out), int(length)) {
+ return false
+ }
+ if skipHeader && !out.Skip(int(headerLen)) {
+ panic("cryptobyte: internal error")
+ }
+
+ return true
+}
diff --git a/vendor/golang.org/x/crypto/cryptobyte/asn1_test.go b/vendor/golang.org/x/crypto/cryptobyte/asn1_test.go
new file mode 100644
index 000000000..c8c187032
--- /dev/null
+++ b/vendor/golang.org/x/crypto/cryptobyte/asn1_test.go
@@ -0,0 +1,285 @@
+// 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 cryptobyte
+
+import (
+ "bytes"
+ "encoding/asn1"
+ "math/big"
+ "reflect"
+ "testing"
+ "time"
+)
+
+type readASN1Test struct {
+ name string
+ in []byte
+ tag Tag
+ ok bool
+ out interface{}
+}
+
+var readASN1TestData = []readASN1Test{
+ {"valid", []byte{0x30, 2, 1, 2}, 0x30, true, []byte{1, 2}},
+ {"truncated", []byte{0x30, 3, 1, 2}, 0x30, false, nil},
+ {"zero length of length", []byte{0x30, 0x80}, 0x30, false, nil},
+ {"invalid long form length", []byte{0x30, 0x81, 1, 1}, 0x30, false, nil},
+ {"non-minimal length", append([]byte{0x30, 0x82, 0, 0x80}, make([]byte, 0x80)...), 0x30, false, nil},
+ {"invalid tag", []byte{0xa1, 3, 0x4, 1, 1}, 31, false, nil},
+ {"high tag", []byte{0x1f, 0x81, 0x80, 0x01, 2, 1, 2}, 0xff /* actually 0x4001, but tag is uint8 */, false, nil},
+}
+
+func TestReadASN1(t *testing.T) {
+ for _, test := range readASN1TestData {
+ t.Run(test.name, func(t *testing.T) {
+ var in, out String = test.in, nil
+ ok := in.ReadASN1(&out, test.tag)
+ if ok != test.ok || ok && !bytes.Equal(out, test.out.([]byte)) {
+ t.Errorf("in.ReadASN1() = %v, want %v; out = %v, want %v", ok, test.ok, out, test.out)
+ }
+ })
+ }
+}
+
+func TestReadASN1Optional(t *testing.T) {
+ var empty String
+ var present bool
+ ok := empty.ReadOptionalASN1(nil, &present, 0xa0)
+ if !ok || present {
+ t.Errorf("empty.ReadOptionalASN1() = %v, want true; present = %v want false", ok, present)
+ }
+
+ var in, out String = []byte{0xa1, 3, 0x4, 1, 1}, nil
+ ok = in.ReadOptionalASN1(&out, &present, 0xa0)
+ if !ok || present {
+ t.Errorf("in.ReadOptionalASN1() = %v, want true, present = %v, want false", ok, present)
+ }
+ ok = in.ReadOptionalASN1(&out, &present, 0xa1)
+ wantBytes := []byte{4, 1, 1}
+ if !ok || !present || !bytes.Equal(out, wantBytes) {
+ t.Errorf("in.ReadOptionalASN1() = %v, want true; present = %v, want true; out = %v, want = %v", ok, present, out, wantBytes)
+ }
+}
+
+var optionalOctetStringTestData = []struct {
+ readASN1Test
+ present bool
+}{
+ {readASN1Test{"empty", []byte{}, 0xa0, true, []byte{}}, false},
+ {readASN1Test{"invalid", []byte{0xa1, 3, 0x4, 2, 1}, 0xa1, false, []byte{}}, true},
+ {readASN1Test{"missing", []byte{0xa1, 3, 0x4, 1, 1}, 0xa0, true, []byte{}}, false},
+ {readASN1Test{"present", []byte{0xa1, 3, 0x4, 1, 1}, 0xa1, true, []byte{1}}, true},
+}
+
+func TestReadASN1OptionalOctetString(t *testing.T) {
+ for _, test := range optionalOctetStringTestData {
+ t.Run(test.name, func(t *testing.T) {
+ in := String(test.in)
+ var out []byte
+ var present bool
+ ok := in.ReadOptionalASN1OctetString(&out, &present, test.tag)
+ if ok != test.ok || present != test.present || !bytes.Equal(out, test.out.([]byte)) {
+ t.Errorf("in.ReadOptionalASN1OctetString() = %v, want %v; present = %v want %v; out = %v, want %v", ok, test.ok, present, test.present, out, test.out)
+ }
+ })
+ }
+}
+
+const defaultInt = -1
+
+var optionalIntTestData = []readASN1Test{
+ {"empty", []byte{}, 0xa0, true, defaultInt},
+ {"invalid", []byte{0xa1, 3, 0x2, 2, 127}, 0xa1, false, 0},
+ {"missing", []byte{0xa1, 3, 0x2, 1, 127}, 0xa0, true, defaultInt},
+ {"present", []byte{0xa1, 3, 0x2, 1, 42}, 0xa1, true, 42},
+}
+
+func TestReadASN1OptionalInteger(t *testing.T) {
+ for _, test := range optionalIntTestData {
+ t.Run(test.name, func(t *testing.T) {
+ in := String(test.in)
+ var out int
+ ok := in.ReadOptionalASN1Integer(&out, test.tag, defaultInt)
+ if ok != test.ok || ok && out != test.out.(int) {
+ t.Errorf("in.ReadOptionalASN1Integer() = %v, want %v; out = %v, want %v", ok, test.ok, out, test.out)
+ }
+ })
+ }
+}
+
+func TestReadASN1IntegerSigned(t *testing.T) {
+ testData64 := []struct {
+ in []byte
+ out int64
+ }{
+ {[]byte{2, 3, 128, 0, 0}, -0x800000},
+ {[]byte{2, 2, 255, 0}, -256},
+ {[]byte{2, 2, 255, 127}, -129},
+ {[]byte{2, 1, 128}, -128},
+ {[]byte{2, 1, 255}, -1},
+ {[]byte{2, 1, 0}, 0},
+ {[]byte{2, 1, 1}, 1},
+ {[]byte{2, 1, 2}, 2},
+ {[]byte{2, 1, 127}, 127},
+ {[]byte{2, 2, 0, 128}, 128},
+ {[]byte{2, 2, 1, 0}, 256},
+ {[]byte{2, 4, 0, 128, 0, 0}, 0x800000},
+ }
+ for i, test := range testData64 {
+ in := String(test.in)
+ var out int64
+ ok := in.ReadASN1Integer(&out)
+ if !ok || out != test.out {
+ t.Errorf("#%d: in.ReadASN1Integer() = %v, want true; out = %d, want %d", i, ok, out, test.out)
+ }
+ }
+
+ // Repeat the same cases, reading into a big.Int.
+ t.Run("big.Int", func(t *testing.T) {
+ for i, test := range testData64 {
+ in := String(test.in)
+ var out big.Int
+ ok := in.ReadASN1Integer(&out)
+ if !ok || out.Int64() != test.out {
+ t.Errorf("#%d: in.ReadASN1Integer() = %v, want true; out = %d, want %d", i, ok, out.Int64(), test.out)
+ }
+ }
+ })
+}
+
+func TestReadASN1IntegerUnsigned(t *testing.T) {
+ testData := []struct {
+ in []byte
+ out uint64
+ }{
+ {[]byte{2, 1, 0}, 0},
+ {[]byte{2, 1, 1}, 1},
+ {[]byte{2, 1, 2}, 2},
+ {[]byte{2, 1, 127}, 127},
+ {[]byte{2, 2, 0, 128}, 128},
+ {[]byte{2, 2, 1, 0}, 256},
+ {[]byte{2, 4, 0, 128, 0, 0}, 0x800000},
+ {[]byte{2, 8, 127, 255, 255, 255, 255, 255, 255, 255}, 0x7fffffffffffffff},
+ {[]byte{2, 9, 0, 128, 0, 0, 0, 0, 0, 0, 0}, 0x8000000000000000},
+ {[]byte{2, 9, 0, 255, 255, 255, 255, 255, 255, 255, 255}, 0xffffffffffffffff},
+ }
+ for i, test := range testData {
+ in := String(test.in)
+ var out uint64
+ ok := in.ReadASN1Integer(&out)
+ if !ok || out != test.out {
+ t.Errorf("#%d: in.ReadASN1Integer() = %v, want true; out = %d, want %d", i, ok, out, test.out)
+ }
+ }
+}
+
+func TestReadASN1IntegerInvalid(t *testing.T) {
+ testData := []String{
+ []byte{3, 1, 0}, // invalid tag
+ // truncated
+ []byte{2, 1},
+ []byte{2, 2, 0},
+ // not minimally encoded
+ []byte{2, 2, 0, 1},
+ []byte{2, 2, 0xff, 0xff},
+ }
+
+ for i, test := range testData {
+ var out int64
+ if test.ReadASN1Integer(&out) {
+ t.Errorf("#%d: in.ReadASN1Integer() = true, want false (out = %d)", i, out)
+ }
+ }
+}
+
+func TestReadASN1ObjectIdentifier(t *testing.T) {
+ testData := []struct {
+ in []byte
+ ok bool
+ out []int
+ }{
+ {[]byte{}, false, []int{}},
+ {[]byte{6, 0}, false, []int{}},
+ {[]byte{5, 1, 85}, false, []int{2, 5}},
+ {[]byte{6, 1, 85}, true, []int{2, 5}},
+ {[]byte{6, 2, 85, 0x02}, true, []int{2, 5, 2}},
+ {[]byte{6, 4, 85, 0x02, 0xc0, 0x00}, true, []int{2, 5, 2, 0x2000}},
+ {[]byte{6, 3, 0x81, 0x34, 0x03}, true, []int{2, 100, 3}},
+ {[]byte{6, 7, 85, 0x02, 0xc0, 0x80, 0x80, 0x80, 0x80}, false, []int{}},
+ }
+
+ for i, test := range testData {
+ in := String(test.in)
+ var out asn1.ObjectIdentifier
+ ok := in.ReadASN1ObjectIdentifier(&out)
+ if ok != test.ok || ok && !out.Equal(test.out) {
+ t.Errorf("#%d: in.ReadASN1ObjectIdentifier() = %v, want %v; out = %v, want %v", i, ok, test.ok, out, test.out)
+ }
+ }
+}
+
+func TestReadASN1GeneralizedTime(t *testing.T) {
+ testData := []struct {
+ in string
+ ok bool
+ out time.Time
+ }{
+ {"20100102030405Z", true, time.Date(2010, 01, 02, 03, 04, 05, 0, time.UTC)},
+ {"20100102030405", false, time.Time{}},
+ {"20100102030405+0607", true, time.Date(2010, 01, 02, 03, 04, 05, 0, time.FixedZone("", 6*60*60+7*60))},
+ {"20100102030405-0607", true, time.Date(2010, 01, 02, 03, 04, 05, 0, time.FixedZone("", -6*60*60-7*60))},
+ /* These are invalid times. However, the time package normalises times
+ * and they were accepted in some versions. See #11134. */
+ {"00000100000000Z", false, time.Time{}},
+ {"20101302030405Z", false, time.Time{}},
+ {"20100002030405Z", false, time.Time{}},
+ {"20100100030405Z", false, time.Time{}},
+ {"20100132030405Z", false, time.Time{}},
+ {"20100231030405Z", false, time.Time{}},
+ {"20100102240405Z", false, time.Time{}},
+ {"20100102036005Z", false, time.Time{}},
+ {"20100102030460Z", false, time.Time{}},
+ {"-20100102030410Z", false, time.Time{}},
+ {"2010-0102030410Z", false, time.Time{}},
+ {"2010-0002030410Z", false, time.Time{}},
+ {"201001-02030410Z", false, time.Time{}},
+ {"20100102-030410Z", false, time.Time{}},
+ {"2010010203-0410Z", false, time.Time{}},
+ {"201001020304-10Z", false, time.Time{}},
+ }
+ for i, test := range testData {
+ in := String(append([]byte{asn1.TagGeneralizedTime, byte(len(test.in))}, test.in...))
+ var out time.Time
+ ok := in.ReadASN1GeneralizedTime(&out)
+ if ok != test.ok || ok && !reflect.DeepEqual(out, test.out) {
+ t.Errorf("#%d: in.ReadASN1GeneralizedTime() = %v, want %v; out = %q, want %q", i, ok, test.ok, out, test.out)
+ }
+ }
+}
+
+func TestReadASN1BitString(t *testing.T) {
+ testData := []struct {
+ in []byte
+ ok bool
+ out asn1.BitString
+ }{
+ {[]byte{}, false, asn1.BitString{}},
+ {[]byte{0x00}, true, asn1.BitString{}},
+ {[]byte{0x07, 0x00}, true, asn1.BitString{Bytes: []byte{0}, BitLength: 1}},
+ {[]byte{0x07, 0x01}, false, asn1.BitString{}},
+ {[]byte{0x07, 0x40}, false, asn1.BitString{}},
+ {[]byte{0x08, 0x00}, false, asn1.BitString{}},
+ {[]byte{0xff}, false, asn1.BitString{}},
+ {[]byte{0xfe, 0x00}, false, asn1.BitString{}},
+ }
+ for i, test := range testData {
+ in := String(append([]byte{3, byte(len(test.in))}, test.in...))
+ var out asn1.BitString
+ ok := in.ReadASN1BitString(&out)
+ if ok != test.ok || ok && (!bytes.Equal(out.Bytes, test.out.Bytes) || out.BitLength != test.out.BitLength) {
+ t.Errorf("#%d: in.ReadASN1BitString() = %v, want %v; out = %v, want %v", i, ok, test.ok, out, test.out)
+ }
+ }
+}
diff --git a/vendor/golang.org/x/crypto/cryptobyte/builder.go b/vendor/golang.org/x/crypto/cryptobyte/builder.go
new file mode 100644
index 000000000..9883fb3c3
--- /dev/null
+++ b/vendor/golang.org/x/crypto/cryptobyte/builder.go
@@ -0,0 +1,255 @@
+// 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 cryptobyte
+
+import (
+ "errors"
+ "fmt"
+)
+
+// A Builder builds byte strings from fixed-length and length-prefixed values.
+// The zero value is a usable Builder that allocates space as needed.
+type Builder struct {
+ err error
+ result []byte
+ fixedSize bool
+ child *Builder
+ offset int
+ pendingLenLen int
+ pendingIsASN1 bool
+}
+
+// NewBuilder creates a Builder that appends its output to the given buffer.
+// Like append(), the slice will be reallocated if its capacity is exceeded.
+// Use Bytes to get the final buffer.
+func NewBuilder(buffer []byte) *Builder {
+ return &Builder{
+ result: buffer,
+ }
+}
+
+// NewFixedBuilder creates a Builder that appends its output into the given
+// buffer. This builder does not reallocate the output buffer. Writes that
+// would exceed the buffer's capacity are treated as an error.
+func NewFixedBuilder(buffer []byte) *Builder {
+ return &Builder{
+ result: buffer,
+ fixedSize: true,
+ }
+}
+
+// Bytes returns the bytes written by the builder or an error if one has
+// occurred during during building.
+func (b *Builder) Bytes() ([]byte, error) {
+ if b.err != nil {
+ return nil, b.err
+ }
+ return b.result[b.offset:], nil
+}
+
+// BytesOrPanic returns the bytes written by the builder or panics if an error
+// has occurred during building.
+func (b *Builder) BytesOrPanic() []byte {
+ if b.err != nil {
+ panic(b.err)
+ }
+ return b.result[b.offset:]
+}
+
+// AddUint8 appends an 8-bit value to the byte string.
+func (b *Builder) AddUint8(v uint8) {
+ b.add(byte(v))
+}
+
+// AddUint16 appends a big-endian, 16-bit value to the byte string.
+func (b *Builder) AddUint16(v uint16) {
+ b.add(byte(v>>8), byte(v))
+}
+
+// AddUint24 appends a big-endian, 24-bit value to the byte string. The highest
+// byte of the 32-bit input value is silently truncated.
+func (b *Builder) AddUint24(v uint32) {
+ b.add(byte(v>>16), byte(v>>8), byte(v))
+}
+
+// AddUint32 appends a big-endian, 32-bit value to the byte string.
+func (b *Builder) AddUint32(v uint32) {
+ b.add(byte(v>>24), byte(v>>16), byte(v>>8), byte(v))
+}
+
+// AddBytes appends a sequence of bytes to the byte string.
+func (b *Builder) AddBytes(v []byte) {
+ b.add(v...)
+}
+
+// BuilderContinuation is continuation-passing interface for building
+// length-prefixed byte sequences. Builder methods for length-prefixed
+// sequences (AddUint8LengthPrefixed etc.) will invoke the BuilderContinuation
+// supplied to them. The child builder passed to the continuation can be used
+// to build the content of the length-prefixed sequence. Example:
+//
+// parent := cryptobyte.NewBuilder()
+// parent.AddUint8LengthPrefixed(func (child *Builder) {
+// child.AddUint8(42)
+// child.AddUint8LengthPrefixed(func (grandchild *Builder) {
+// grandchild.AddUint8(5)
+// })
+// })
+//
+// It is an error to write more bytes to the child than allowed by the reserved
+// length prefix. After the continuation returns, the child must be considered
+// invalid, i.e. users must not store any copies or references of the child
+// that outlive the continuation.
+type BuilderContinuation func(child *Builder)
+
+// AddUint8LengthPrefixed adds a 8-bit length-prefixed byte sequence.
+func (b *Builder) AddUint8LengthPrefixed(f BuilderContinuation) {
+ b.addLengthPrefixed(1, false, f)
+}
+
+// AddUint16LengthPrefixed adds a big-endian, 16-bit length-prefixed byte sequence.
+func (b *Builder) AddUint16LengthPrefixed(f BuilderContinuation) {
+ b.addLengthPrefixed(2, false, f)
+}
+
+// AddUint24LengthPrefixed adds a big-endian, 24-bit length-prefixed byte sequence.
+func (b *Builder) AddUint24LengthPrefixed(f BuilderContinuation) {
+ b.addLengthPrefixed(3, false, f)
+}
+
+func (b *Builder) addLengthPrefixed(lenLen int, isASN1 bool, f BuilderContinuation) {
+ // Subsequent writes can be ignored if the builder has encountered an error.
+ if b.err != nil {
+ return
+ }
+
+ offset := len(b.result)
+ b.add(make([]byte, lenLen)...)
+
+ b.child = &Builder{
+ result: b.result,
+ fixedSize: b.fixedSize,
+ offset: offset,
+ pendingLenLen: lenLen,
+ pendingIsASN1: isASN1,
+ }
+
+ f(b.child)
+ b.flushChild()
+ if b.child != nil {
+ panic("cryptobyte: internal error")
+ }
+}
+
+func (b *Builder) flushChild() {
+ if b.child == nil {
+ return
+ }
+ b.child.flushChild()
+ child := b.child
+ b.child = nil
+
+ if child.err != nil {
+ b.err = child.err
+ return
+ }
+
+ length := len(child.result) - child.pendingLenLen - child.offset
+
+ if length < 0 {
+ panic("cryptobyte: internal error") // result unexpectedly shrunk
+ }
+
+ if child.pendingIsASN1 {
+ // For ASN.1, we reserved a single byte for the length. If that turned out
+ // to be incorrect, we have to move the contents along in order to make
+ // space.
+ if child.pendingLenLen != 1 {
+ panic("cryptobyte: internal error")
+ }
+ var lenLen, lenByte uint8
+ if int64(length) > 0xfffffffe {
+ b.err = errors.New("pending ASN.1 child too long")
+ return
+ } else if length > 0xffffff {
+ lenLen = 5
+ lenByte = 0x80 | 4
+ } else if length > 0xffff {
+ lenLen = 4
+ lenByte = 0x80 | 3
+ } else if length > 0xff {
+ lenLen = 3
+ lenByte = 0x80 | 2
+ } else if length > 0x7f {
+ lenLen = 2
+ lenByte = 0x80 | 1
+ } else {
+ lenLen = 1
+ lenByte = uint8(length)
+ length = 0
+ }
+
+ // Insert the initial length byte, make space for successive length bytes,
+ // and adjust the offset.
+ child.result[child.offset] = lenByte
+ extraBytes := int(lenLen - 1)
+ if extraBytes != 0 {
+ child.add(make([]byte, extraBytes)...)
+ childStart := child.offset + child.pendingLenLen
+ copy(child.result[childStart+extraBytes:], child.result[childStart:])
+ }
+ child.offset++
+ child.pendingLenLen = extraBytes
+ }
+
+ l := length
+ for i := child.pendingLenLen - 1; i >= 0; i-- {
+ child.result[child.offset+i] = uint8(l)
+ l >>= 8
+ }
+ if l != 0 {
+ b.err = fmt.Errorf("cryptobyte: pending child length %d exceeds %d-byte length prefix", length, child.pendingLenLen)
+ return
+ }
+
+ if !b.fixedSize {
+ b.result = child.result // In case child reallocated result.
+ }
+}
+
+func (b *Builder) add(bytes ...byte) {
+ if b.err != nil {
+ return
+ }
+ if b.child != nil {
+ panic("attempted write while child is pending")
+ }
+ if len(b.result)+len(bytes) < len(bytes) {
+ b.err = errors.New("cryptobyte: length overflow")
+ }
+ if b.fixedSize && len(b.result)+len(bytes) > cap(b.result) {
+ b.err = errors.New("cryptobyte: Builder is exceeding its fixed-size buffer")
+ return
+ }
+ b.result = append(b.result, bytes...)
+}
+
+// A MarshalingValue marshals itself into a Builder.
+type MarshalingValue interface {
+ // Marshal is called by Builder.AddValue. It receives a pointer to a builder
+ // to marshal itself into. It may return an error that occurred during
+ // marshaling, such as unset or invalid values.
+ Marshal(b *Builder) error
+}
+
+// AddValue calls Marshal on v, passing a pointer to the builder to append to.
+// If Marshal returns an error, it is set on the Builder so that subsequent
+// appends don't have an effect.
+func (b *Builder) AddValue(v MarshalingValue) {
+ err := v.Marshal(b)
+ if err != nil {
+ b.err = err
+ }
+}
diff --git a/vendor/golang.org/x/crypto/cryptobyte/cryptobyte_test.go b/vendor/golang.org/x/crypto/cryptobyte/cryptobyte_test.go
new file mode 100644
index 000000000..49c61dca4
--- /dev/null
+++ b/vendor/golang.org/x/crypto/cryptobyte/cryptobyte_test.go
@@ -0,0 +1,379 @@
+// 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 cryptobyte
+
+import (
+ "bytes"
+ "fmt"
+ "testing"
+)
+
+func builderBytesEq(b *Builder, want ...byte) error {
+ got := b.BytesOrPanic()
+ if !bytes.Equal(got, want) {
+ return fmt.Errorf("Bytes() = %v, want %v", got, want)
+ }
+ return nil
+}
+
+func TestBytes(t *testing.T) {
+ var b Builder
+ v := []byte("foobarbaz")
+ b.AddBytes(v[0:3])
+ b.AddBytes(v[3:4])
+ b.AddBytes(v[4:9])
+ if err := builderBytesEq(&b, v...); err != nil {
+ t.Error(err)
+ }
+ s := String(b.BytesOrPanic())
+ for _, w := range []string{"foo", "bar", "baz"} {
+ var got []byte
+ if !s.ReadBytes(&got, 3) {
+ t.Errorf("ReadBytes() = false, want true (w = %v)", w)
+ }
+ want := []byte(w)
+ if !bytes.Equal(got, want) {
+ t.Errorf("ReadBytes(): got = %v, want %v", got, want)
+ }
+ }
+ if len(s) != 0 {
+ t.Errorf("len(s) = %d, want 0", len(s))
+ }
+}
+
+func TestUint8(t *testing.T) {
+ var b Builder
+ b.AddUint8(42)
+ if err := builderBytesEq(&b, 42); err != nil {
+ t.Error(err)
+ }
+
+ var s String = b.BytesOrPanic()
+ var v uint8
+ if !s.ReadUint8(&v) {
+ t.Error("ReadUint8() = false, want true")
+ }
+ if v != 42 {
+ t.Errorf("v = %d, want 42", v)
+ }
+ if len(s) != 0 {
+ t.Errorf("len(s) = %d, want 0", len(s))
+ }
+}
+
+func TestUint16(t *testing.T) {
+ var b Builder
+ b.AddUint16(65534)
+ if err := builderBytesEq(&b, 255, 254); err != nil {
+ t.Error(err)
+ }
+ var s String = b.BytesOrPanic()
+ var v uint16
+ if !s.ReadUint16(&v) {
+ t.Error("ReadUint16() == false, want true")
+ }
+ if v != 65534 {
+ t.Errorf("v = %d, want 65534", v)
+ }
+ if len(s) != 0 {
+ t.Errorf("len(s) = %d, want 0", len(s))
+ }
+}
+
+func TestUint24(t *testing.T) {
+ var b Builder
+ b.AddUint24(0xfffefd)
+ if err := builderBytesEq(&b, 255, 254, 253); err != nil {
+ t.Error(err)
+ }
+
+ var s String = b.BytesOrPanic()
+ var v uint32
+ if !s.ReadUint24(&v) {
+ t.Error("ReadUint8() = false, want true")
+ }
+ if v != 0xfffefd {
+ t.Errorf("v = %d, want fffefd", v)
+ }
+ if len(s) != 0 {
+ t.Errorf("len(s) = %d, want 0", len(s))
+ }
+}
+
+func TestUint24Truncation(t *testing.T) {
+ var b Builder
+ b.AddUint24(0x10111213)
+ if err := builderBytesEq(&b, 0x11, 0x12, 0x13); err != nil {
+ t.Error(err)
+ }
+}
+
+func TestUint32(t *testing.T) {
+ var b Builder
+ b.AddUint32(0xfffefdfc)
+ if err := builderBytesEq(&b, 255, 254, 253, 252); err != nil {
+ t.Error(err)
+ }
+
+ var s String = b.BytesOrPanic()
+ var v uint32
+ if !s.ReadUint32(&v) {
+ t.Error("ReadUint8() = false, want true")
+ }
+ if v != 0xfffefdfc {
+ t.Errorf("v = %x, want fffefdfc", v)
+ }
+ if len(s) != 0 {
+ t.Errorf("len(s) = %d, want 0", len(s))
+ }
+}
+
+func TestUMultiple(t *testing.T) {
+ var b Builder
+ b.AddUint8(23)
+ b.AddUint32(0xfffefdfc)
+ b.AddUint16(42)
+ if err := builderBytesEq(&b, 23, 255, 254, 253, 252, 0, 42); err != nil {
+ t.Error(err)
+ }
+
+ var s String = b.BytesOrPanic()
+ var (
+ x uint8
+ y uint32
+ z uint16
+ )
+ if !s.ReadUint8(&x) || !s.ReadUint32(&y) || !s.ReadUint16(&z) {
+ t.Error("ReadUint8() = false, want true")
+ }
+ if x != 23 || y != 0xfffefdfc || z != 42 {
+ t.Errorf("x, y, z = %d, %d, %d; want 23, 4294901244, 5", x, y, z)
+ }
+ if len(s) != 0 {
+ t.Errorf("len(s) = %d, want 0", len(s))
+ }
+}
+
+func TestUint8LengthPrefixedSimple(t *testing.T) {
+ var b Builder
+ b.AddUint8LengthPrefixed(func(c *Builder) {
+ c.AddUint8(23)
+ c.AddUint8(42)
+ })
+ if err := builderBytesEq(&b, 2, 23, 42); err != nil {
+ t.Error(err)
+ }
+
+ var base, child String = b.BytesOrPanic(), nil
+ var x, y uint8
+ if !base.ReadUint8LengthPrefixed(&child) || !child.ReadUint8(&x) ||
+ !child.ReadUint8(&y) {
+ t.Error("parsing failed")
+ }
+ if x != 23 || y != 42 {
+ t.Errorf("want x, y == 23, 42; got %d, %d", x, y)
+ }
+ if len(base) != 0 {
+ t.Errorf("len(base) = %d, want 0", len(base))
+ }
+ if len(child) != 0 {
+ t.Errorf("len(child) = %d, want 0", len(child))
+ }
+}
+
+func TestUint8LengthPrefixedMulti(t *testing.T) {
+ var b Builder
+ b.AddUint8LengthPrefixed(func(c *Builder) {
+ c.AddUint8(23)
+ c.AddUint8(42)
+ })
+ b.AddUint8(5)
+ b.AddUint8LengthPrefixed(func(c *Builder) {
+ c.AddUint8(123)
+ c.AddUint8(234)
+ })
+ if err := builderBytesEq(&b, 2, 23, 42, 5, 2, 123, 234); err != nil {
+ t.Error(err)
+ }
+
+ var s, child String = b.BytesOrPanic(), nil
+ var u, v, w, x, y uint8
+ if !s.ReadUint8LengthPrefixed(&child) || !child.ReadUint8(&u) || !child.ReadUint8(&v) ||
+ !s.ReadUint8(&w) || !s.ReadUint8LengthPrefixed(&child) || !child.ReadUint8(&x) || !child.ReadUint8(&y) {
+ t.Error("parsing failed")
+ }
+ if u != 23 || v != 42 || w != 5 || x != 123 || y != 234 {
+ t.Errorf("u, v, w, x, y = %d, %d, %d, %d, %d; want 23, 42, 5, 123, 234",
+ u, v, w, x, y)
+ }
+ if len(s) != 0 {
+ t.Errorf("len(s) = %d, want 0", len(s))
+ }
+ if len(child) != 0 {
+ t.Errorf("len(child) = %d, want 0", len(child))
+ }
+}
+
+func TestUint8LengthPrefixedNested(t *testing.T) {
+ var b Builder
+ b.AddUint8LengthPrefixed(func(c *Builder) {
+ c.AddUint8(5)
+ c.AddUint8LengthPrefixed(func(d *Builder) {
+ d.AddUint8(23)
+ d.AddUint8(42)
+ })
+ c.AddUint8(123)
+ })
+ if err := builderBytesEq(&b, 5, 5, 2, 23, 42, 123); err != nil {
+ t.Error(err)
+ }
+
+ var base, child1, child2 String = b.BytesOrPanic(), nil, nil
+ var u, v, w, x uint8
+ if !base.ReadUint8LengthPrefixed(&child1) {
+ t.Error("parsing base failed")
+ }
+ if !child1.ReadUint8(&u) || !child1.ReadUint8LengthPrefixed(&child2) || !child1.ReadUint8(&x) {
+ t.Error("parsing child1 failed")
+ }
+ if !child2.ReadUint8(&v) || !child2.ReadUint8(&w) {
+ t.Error("parsing child2 failed")
+ }
+ if u != 5 || v != 23 || w != 42 || x != 123 {
+ t.Errorf("u, v, w, x = %d, %d, %d, %d, want 5, 23, 42, 123",
+ u, v, w, x)
+ }
+ if len(base) != 0 {
+ t.Errorf("len(base) = %d, want 0", len(base))
+ }
+ if len(child1) != 0 {
+ t.Errorf("len(child1) = %d, want 0", len(child1))
+ }
+ if len(base) != 0 {
+ t.Errorf("len(child2) = %d, want 0", len(child2))
+ }
+}
+
+func TestPreallocatedBuffer(t *testing.T) {
+ var buf [5]byte
+ b := NewBuilder(buf[0:0])
+ b.AddUint8(1)
+ b.AddUint8LengthPrefixed(func(c *Builder) {
+ c.AddUint8(3)
+ c.AddUint8(4)
+ })
+ b.AddUint16(1286) // Outgrow buf by one byte.
+ want := []byte{1, 2, 3, 4, 0}
+ if !bytes.Equal(buf[:], want) {
+ t.Errorf("buf = %v want %v", buf, want)
+ }
+ if err := builderBytesEq(b, 1, 2, 3, 4, 5, 6); err != nil {
+ t.Error(err)
+ }
+}
+
+func TestWriteWithPendingChild(t *testing.T) {
+ var b Builder
+ b.AddUint8LengthPrefixed(func(c *Builder) {
+ c.AddUint8LengthPrefixed(func(d *Builder) {
+ defer func() {
+ if recover() == nil {
+ t.Errorf("recover() = nil, want error; c.AddUint8() did not panic")
+ }
+ }()
+ c.AddUint8(2) // panics
+
+ defer func() {
+ if recover() == nil {
+ t.Errorf("recover() = nil, want error; b.AddUint8() did not panic")
+ }
+ }()
+ b.AddUint8(2) // panics
+ })
+
+ defer func() {
+ if recover() == nil {
+ t.Errorf("recover() = nil, want error; b.AddUint8() did not panic")
+ }
+ }()
+ b.AddUint8(2) // panics
+ })
+}
+
+// ASN.1
+
+func TestASN1Int64(t *testing.T) {
+ tests := []struct {
+ in int64
+ want []byte
+ }{
+ {-0x800000, []byte{2, 3, 128, 0, 0}},
+ {-256, []byte{2, 2, 255, 0}},
+ {-129, []byte{2, 2, 255, 127}},
+ {-128, []byte{2, 1, 128}},
+ {-1, []byte{2, 1, 255}},
+ {0, []byte{2, 1, 0}},
+ {1, []byte{2, 1, 1}},
+ {2, []byte{2, 1, 2}},
+ {127, []byte{2, 1, 127}},
+ {128, []byte{2, 2, 0, 128}},
+ {256, []byte{2, 2, 1, 0}},
+ {0x800000, []byte{2, 4, 0, 128, 0, 0}},
+ }
+ for i, tt := range tests {
+ var b Builder
+ b.AddASN1Int64(tt.in)
+ if err := builderBytesEq(&b, tt.want...); err != nil {
+ t.Errorf("%v, (i = %d; in = %v)", err, i, tt.in)
+ }
+
+ var n int64
+ s := String(b.BytesOrPanic())
+ ok := s.ReadASN1Integer(&n)
+ if !ok || n != tt.in {
+ t.Errorf("s.ReadASN1Integer(&n) = %v, n = %d; want true, n = %d (i = %d)",
+ ok, n, tt.in, i)
+ }
+ if len(s) != 0 {
+ t.Errorf("len(s) = %d, want 0", len(s))
+ }
+ }
+}
+
+func TestASN1Uint64(t *testing.T) {
+ tests := []struct {
+ in uint64
+ want []byte
+ }{
+ {0, []byte{2, 1, 0}},
+ {1, []byte{2, 1, 1}},
+ {2, []byte{2, 1, 2}},
+ {127, []byte{2, 1, 127}},
+ {128, []byte{2, 2, 0, 128}},
+ {256, []byte{2, 2, 1, 0}},
+ {0x800000, []byte{2, 4, 0, 128, 0, 0}},
+ {0x7fffffffffffffff, []byte{2, 8, 127, 255, 255, 255, 255, 255, 255, 255}},
+ {0x8000000000000000, []byte{2, 9, 0, 128, 0, 0, 0, 0, 0, 0, 0}},
+ {0xffffffffffffffff, []byte{2, 9, 0, 255, 255, 255, 255, 255, 255, 255, 255}},
+ }
+ for i, tt := range tests {
+ var b Builder
+ b.AddASN1Uint64(tt.in)
+ if err := builderBytesEq(&b, tt.want...); err != nil {
+ t.Errorf("%v, (i = %d; in = %v)", err, i, tt.in)
+ }
+
+ var n uint64
+ s := String(b.BytesOrPanic())
+ ok := s.ReadASN1Integer(&n)
+ if !ok || n != tt.in {
+ t.Errorf("s.ReadASN1Integer(&n) = %v, n = %d; want true, n = %d (i = %d)",
+ ok, n, tt.in, i)
+ }
+ if len(s) != 0 {
+ t.Errorf("len(s) = %d, want 0", len(s))
+ }
+ }
+}
diff --git a/vendor/golang.org/x/crypto/cryptobyte/example_test.go b/vendor/golang.org/x/crypto/cryptobyte/example_test.go
new file mode 100644
index 000000000..7d3c06e12
--- /dev/null
+++ b/vendor/golang.org/x/crypto/cryptobyte/example_test.go
@@ -0,0 +1,120 @@
+// 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 cryptobyte_test
+
+import (
+ "encoding/asn1"
+ "fmt"
+ "golang.org/x/crypto/cryptobyte"
+)
+
+func ExampleString_lengthPrefixed() {
+ // This is an example of parsing length-prefixed data (as found in, for
+ // example, TLS). Imagine a 16-bit prefixed series of 8-bit prefixed
+ // strings.
+
+ input := cryptobyte.String([]byte{0, 12, 5, 'h', 'e', 'l', 'l', 'o', 5, 'w', 'o', 'r', 'l', 'd'})
+ var result []string
+
+ var values cryptobyte.String
+ if !input.ReadUint16LengthPrefixed(&values) ||
+ !input.Empty() {
+ panic("bad format")
+ }
+
+ for !values.Empty() {
+ var value cryptobyte.String
+ if !values.ReadUint8LengthPrefixed(&value) {
+ panic("bad format")
+ }
+
+ result = append(result, string(value))
+ }
+
+ // Output: []string{"hello", "world"}
+ fmt.Printf("%#v\n", result)
+}
+
+func ExampleString_asn1() {
+ // This is an example of parsing ASN.1 data that looks like:
+ // Foo ::= SEQUENCE {
+ // version [6] INTEGER DEFAULT 0
+ // data OCTET STRING
+ // }
+
+ input := cryptobyte.String([]byte{0x30, 12, 0xa6, 3, 2, 1, 2, 4, 5, 'h', 'e', 'l', 'l', 'o'})
+
+ var (
+ version int64
+ data, inner, versionBytes cryptobyte.String
+ haveVersion bool
+ )
+ if !input.ReadASN1(&inner, cryptobyte.Tag(asn1.TagSequence).Constructed()) ||
+ !input.Empty() ||
+ !inner.ReadOptionalASN1(&versionBytes, &haveVersion, cryptobyte.Tag(6).Constructed().ContextSpecific()) ||
+ (haveVersion && !versionBytes.ReadASN1Integer(&version)) ||
+ (haveVersion && !versionBytes.Empty()) ||
+ !inner.ReadASN1(&data, asn1.TagOctetString) ||
+ !inner.Empty() {
+ panic("bad format")
+ }
+
+ // Output: haveVersion: true, version: 2, data: hello
+ fmt.Printf("haveVersion: %t, version: %d, data: %s\n", haveVersion, version, string(data))
+}
+
+func ExampleBuilder_asn1() {
+ // This is an example of building ASN.1 data that looks like:
+ // Foo ::= SEQUENCE {
+ // version [6] INTEGER DEFAULT 0
+ // data OCTET STRING
+ // }
+
+ version := int64(2)
+ data := []byte("hello")
+ const defaultVersion = 0
+
+ var b cryptobyte.Builder
+ b.AddASN1(cryptobyte.Tag(asn1.TagSequence).Constructed(), func(b *cryptobyte.Builder) {
+ if version != defaultVersion {
+ b.AddASN1(cryptobyte.Tag(6).Constructed().ContextSpecific(), func(b *cryptobyte.Builder) {
+ b.AddASN1Int64(version)
+ })
+ }
+ b.AddASN1OctetString(data)
+ })
+
+ result, err := b.Bytes()
+ if err != nil {
+ panic(err)
+ }
+
+ // Output: 300ca603020102040568656c6c6f
+ fmt.Printf("%x\n", result)
+}
+
+func ExampleBuilder_lengthPrefixed() {
+ // This is an example of building length-prefixed data (as found in,
+ // for example, TLS). Imagine a 16-bit prefixed series of 8-bit
+ // prefixed strings.
+ input := []string{"hello", "world"}
+
+ var b cryptobyte.Builder
+ b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) {
+ for _, value := range input {
+ b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) {
+ b.AddBytes([]byte(value))
+ })
+ }
+ })
+
+ result, err := b.Bytes()
+ if err != nil {
+ panic(err)
+ }
+
+ // Output: 000c0568656c6c6f05776f726c64
+ fmt.Printf("%x\n", result)
+}
diff --git a/vendor/golang.org/x/crypto/cryptobyte/string.go b/vendor/golang.org/x/crypto/cryptobyte/string.go
new file mode 100644
index 000000000..b1215b3bf
--- /dev/null
+++ b/vendor/golang.org/x/crypto/cryptobyte/string.go
@@ -0,0 +1,157 @@
+// 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 cryptobyte implements building and parsing of byte strings for
+// DER-encoded ASN.1 and TLS messages. See the examples for the Builder and
+// String types to get started.
+package cryptobyte
+
+// String represents a string of bytes. It provides methods for parsing
+// fixed-length and length-prefixed values from it.
+type String []byte
+
+// read advances a String by n bytes and returns them. If less than n bytes
+// remain, it returns nil.
+func (s *String) read(n int) []byte {
+ if len(*s) < n {
+ return nil
+ }
+ v := (*s)[:n]
+ *s = (*s)[n:]
+ return v
+}
+
+// Skip advances the String by n byte and reports whether it was successful.
+func (s *String) Skip(n int) bool {
+ return s.read(n) != nil
+}
+
+// ReadUint8 decodes an 8-bit value into out and advances over it. It
+// returns true on success and false on error.
+func (s *String) ReadUint8(out *uint8) bool {
+ v := s.read(1)
+ if v == nil {
+ return false
+ }
+ *out = uint8(v[0])
+ return true
+}
+
+// ReadUint16 decodes a big-endian, 16-bit value into out and advances over it.
+// It returns true on success and false on error.
+func (s *String) ReadUint16(out *uint16) bool {
+ v := s.read(2)
+ if v == nil {
+ return false
+ }
+ *out = uint16(v[0])<<8 | uint16(v[1])
+ return true
+}
+
+// ReadUint24 decodes a big-endian, 24-bit value into out and advances over it.
+// It returns true on success and false on error.
+func (s *String) ReadUint24(out *uint32) bool {
+ v := s.read(3)
+ if v == nil {
+ return false
+ }
+ *out = uint32(v[0])<<16 | uint32(v[1])<<8 | uint32(v[2])
+ return true
+}
+
+// ReadUint32 decodes a big-endian, 32-bit value into out and advances over it.
+// It returns true on success and false on error.
+func (s *String) ReadUint32(out *uint32) bool {
+ v := s.read(4)
+ if v == nil {
+ return false
+ }
+ *out = uint32(v[0])<<24 | uint32(v[1])<<16 | uint32(v[2])<<8 | uint32(v[3])
+ return true
+}
+
+func (s *String) readUnsigned(out *uint32, length int) bool {
+ v := s.read(length)
+ if v == nil {
+ return false
+ }
+ var result uint32
+ for i := 0; i < length; i++ {
+ result <<= 8
+ result |= uint32(v[i])
+ }
+ *out = result
+ return true
+}
+
+func (s *String) readLengthPrefixed(lenLen int, outChild *String) bool {
+ lenBytes := s.read(lenLen)
+ if lenBytes == nil {
+ return false
+ }
+ var length uint32
+ for _, b := range lenBytes {
+ length = length << 8
+ length = length | uint32(b)
+ }
+ if int(length) < 0 {
+ // This currently cannot overflow because we read uint24 at most, but check
+ // anyway in case that changes in the future.
+ return false
+ }
+ v := s.read(int(length))
+ if v == nil {
+ return false
+ }
+ *outChild = v
+ return true
+}
+
+// ReadUint8LengthPrefixed reads the content of an 8-bit length-prefixed value
+// into out and advances over it. It returns true on success and false on
+// error.
+func (s *String) ReadUint8LengthPrefixed(out *String) bool {
+ return s.readLengthPrefixed(1, out)
+}
+
+// ReadUint16LengthPrefixed reads the content of a big-endian, 16-bit
+// length-prefixed value into out and advances over it. It returns true on
+// success and false on error.
+func (s *String) ReadUint16LengthPrefixed(out *String) bool {
+ return s.readLengthPrefixed(2, out)
+}
+
+// ReadUint24LengthPrefixed reads the content of a big-endian, 24-bit
+// length-prefixed value into out and advances over it. It returns true on
+// success and false on error.
+func (s *String) ReadUint24LengthPrefixed(out *String) bool {
+ return s.readLengthPrefixed(3, out)
+}
+
+// ReadBytes reads n bytes into out and advances over them. It returns true on
+// success and false and error.
+func (s *String) ReadBytes(out *[]byte, n int) bool {
+ v := s.read(n)
+ if v == nil {
+ return false
+ }
+ *out = v
+ return true
+}
+
+// CopyBytes copies len(out) bytes into out and advances over them. It returns
+// true on success and false on error.
+func (s *String) CopyBytes(out []byte) bool {
+ n := len(out)
+ v := s.read(n)
+ if v == nil {
+ return false
+ }
+ return copy(out, v) == n
+}
+
+// Empty reports whether the string does not contain any bytes.
+func (s String) Empty() bool {
+ return len(s) == 0
+}
diff --git a/vendor/golang.org/x/crypto/curve25519/const_amd64.h b/vendor/golang.org/x/crypto/curve25519/const_amd64.h
new file mode 100644
index 000000000..80ad2220f
--- /dev/null
+++ b/vendor/golang.org/x/crypto/curve25519/const_amd64.h
@@ -0,0 +1,8 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// This code was translated into a form compatible with 6a from the public
+// domain sources in SUPERCOP: http://bench.cr.yp.to/supercop.html
+
+#define REDMASK51 0x0007FFFFFFFFFFFF
diff --git a/vendor/golang.org/x/crypto/curve25519/const_amd64.s b/vendor/golang.org/x/crypto/curve25519/const_amd64.s
index 797f9b051..0ad539885 100644
--- a/vendor/golang.org/x/crypto/curve25519/const_amd64.s
+++ b/vendor/golang.org/x/crypto/curve25519/const_amd64.s
@@ -7,8 +7,8 @@
// +build amd64,!gccgo,!appengine
-DATA ·REDMASK51(SB)/8, $0x0007FFFFFFFFFFFF
-GLOBL ·REDMASK51(SB), 8, $8
+// These constants cannot be encoded in non-MOVQ immediates.
+// We access them directly from memory instead.
DATA ·_121666_213(SB)/8, $996687872
GLOBL ·_121666_213(SB), 8, $8
diff --git a/vendor/golang.org/x/crypto/curve25519/freeze_amd64.s b/vendor/golang.org/x/crypto/curve25519/freeze_amd64.s
index 932800b8d..536479bf6 100644
--- a/vendor/golang.org/x/crypto/curve25519/freeze_amd64.s
+++ b/vendor/golang.org/x/crypto/curve25519/freeze_amd64.s
@@ -7,6 +7,8 @@
// +build amd64,!gccgo,!appengine
+#include "const_amd64.h"
+
// func freeze(inout *[5]uint64)
TEXT ·freeze(SB),7,$0-8
MOVQ inout+0(FP), DI
@@ -16,7 +18,7 @@ TEXT ·freeze(SB),7,$0-8
MOVQ 16(DI),CX
MOVQ 24(DI),R8
MOVQ 32(DI),R9
- MOVQ ·REDMASK51(SB),AX
+ MOVQ $REDMASK51,AX
MOVQ AX,R10
SUBQ $18,R10
MOVQ $3,R11
diff --git a/vendor/golang.org/x/crypto/curve25519/ladderstep_amd64.s b/vendor/golang.org/x/crypto/curve25519/ladderstep_amd64.s
index ee7b36c36..7074e5cd9 100644
--- a/vendor/golang.org/x/crypto/curve25519/ladderstep_amd64.s
+++ b/vendor/golang.org/x/crypto/curve25519/ladderstep_amd64.s
@@ -7,6 +7,8 @@
// +build amd64,!gccgo,!appengine
+#include "const_amd64.h"
+
// func ladderstep(inout *[5][5]uint64)
TEXT ·ladderstep(SB),0,$296-8
MOVQ inout+0(FP),DI
@@ -118,7 +120,7 @@ TEXT ·ladderstep(SB),0,$296-8
MULQ 72(SP)
ADDQ AX,R12
ADCQ DX,R13
- MOVQ ·REDMASK51(SB),DX
+ MOVQ $REDMASK51,DX
SHLQ $13,CX:SI
ANDQ DX,SI
SHLQ $13,R9:R8
@@ -233,7 +235,7 @@ TEXT ·ladderstep(SB),0,$296-8
MULQ 32(SP)
ADDQ AX,R12
ADCQ DX,R13
- MOVQ ·REDMASK51(SB),DX
+ MOVQ $REDMASK51,DX
SHLQ $13,CX:SI
ANDQ DX,SI
SHLQ $13,R9:R8
@@ -438,7 +440,7 @@ TEXT ·ladderstep(SB),0,$296-8
MULQ 72(SP)
ADDQ AX,R12
ADCQ DX,R13
- MOVQ ·REDMASK51(SB),DX
+ MOVQ $REDMASK51,DX
SHLQ $13,CX:SI
ANDQ DX,SI
SHLQ $13,R9:R8
@@ -588,7 +590,7 @@ TEXT ·ladderstep(SB),0,$296-8
MULQ 32(SP)
ADDQ AX,R12
ADCQ DX,R13
- MOVQ ·REDMASK51(SB),DX
+ MOVQ $REDMASK51,DX
SHLQ $13,CX:SI
ANDQ DX,SI
SHLQ $13,R9:R8
@@ -728,7 +730,7 @@ TEXT ·ladderstep(SB),0,$296-8
MULQ 152(DI)
ADDQ AX,R12
ADCQ DX,R13
- MOVQ ·REDMASK51(SB),DX
+ MOVQ $REDMASK51,DX
SHLQ $13,CX:SI
ANDQ DX,SI
SHLQ $13,R9:R8
@@ -843,7 +845,7 @@ TEXT ·ladderstep(SB),0,$296-8
MULQ 192(DI)
ADDQ AX,R12
ADCQ DX,R13
- MOVQ ·REDMASK51(SB),DX
+ MOVQ $REDMASK51,DX
SHLQ $13,CX:SI
ANDQ DX,SI
SHLQ $13,R9:R8
@@ -993,7 +995,7 @@ TEXT ·ladderstep(SB),0,$296-8
MULQ 32(DI)
ADDQ AX,R12
ADCQ DX,R13
- MOVQ ·REDMASK51(SB),DX
+ MOVQ $REDMASK51,DX
SHLQ $13,CX:SI
ANDQ DX,SI
SHLQ $13,R9:R8
@@ -1143,7 +1145,7 @@ TEXT ·ladderstep(SB),0,$296-8
MULQ 112(SP)
ADDQ AX,R12
ADCQ DX,R13
- MOVQ ·REDMASK51(SB),DX
+ MOVQ $REDMASK51,DX
SHLQ $13,CX:SI
ANDQ DX,SI
SHLQ $13,R9:R8
@@ -1329,7 +1331,7 @@ TEXT ·ladderstep(SB),0,$296-8
MULQ 192(SP)
ADDQ AX,R12
ADCQ DX,R13
- MOVQ ·REDMASK51(SB),DX
+ MOVQ $REDMASK51,DX
SHLQ $13,CX:SI
ANDQ DX,SI
SHLQ $13,R9:R8
diff --git a/vendor/golang.org/x/crypto/curve25519/mul_amd64.s b/vendor/golang.org/x/crypto/curve25519/mul_amd64.s
index 33ce57dcd..b162e6515 100644
--- a/vendor/golang.org/x/crypto/curve25519/mul_amd64.s
+++ b/vendor/golang.org/x/crypto/curve25519/mul_amd64.s
@@ -7,6 +7,8 @@
// +build amd64,!gccgo,!appengine
+#include "const_amd64.h"
+
// func mul(dest, a, b *[5]uint64)
TEXT ·mul(SB),0,$16-24
MOVQ dest+0(FP), DI
@@ -121,7 +123,7 @@ TEXT ·mul(SB),0,$16-24
MULQ 32(CX)
ADDQ AX,R14
ADCQ DX,R15
- MOVQ ·REDMASK51(SB),SI
+ MOVQ $REDMASK51,SI
SHLQ $13,R9:R8
ANDQ SI,R8
SHLQ $13,R11:R10
diff --git a/vendor/golang.org/x/crypto/curve25519/square_amd64.s b/vendor/golang.org/x/crypto/curve25519/square_amd64.s
index 3a92804dd..4e864a83e 100644
--- a/vendor/golang.org/x/crypto/curve25519/square_amd64.s
+++ b/vendor/golang.org/x/crypto/curve25519/square_amd64.s
@@ -7,6 +7,8 @@
// +build amd64,!gccgo,!appengine
+#include "const_amd64.h"
+
// func square(out, in *[5]uint64)
TEXT ·square(SB),7,$0-16
MOVQ out+0(FP), DI
@@ -84,7 +86,7 @@ TEXT ·square(SB),7,$0-16
MULQ 32(SI)
ADDQ AX,R13
ADCQ DX,R14
- MOVQ ·REDMASK51(SB),SI
+ MOVQ $REDMASK51,SI
SHLQ $13,R8:CX
ANDQ SI,CX
SHLQ $13,R10:R9
diff --git a/vendor/golang.org/x/crypto/ocsp/ocsp_test.go b/vendor/golang.org/x/crypto/ocsp/ocsp_test.go
index a3c898619..d325d851e 100644
--- a/vendor/golang.org/x/crypto/ocsp/ocsp_test.go
+++ b/vendor/golang.org/x/crypto/ocsp/ocsp_test.go
@@ -225,7 +225,6 @@ func TestOCSPResponse(t *testing.T) {
},
}
- producedAt := time.Now().Truncate(time.Minute)
thisUpdate := time.Date(2010, 7, 7, 15, 1, 5, 0, time.UTC)
nextUpdate := time.Date(2010, 7, 7, 18, 35, 17, 0, time.UTC)
template := Response{
@@ -284,8 +283,9 @@ func TestOCSPResponse(t *testing.T) {
t.Errorf("resp.Extensions: got %v, want %v", resp.Extensions, template.ExtraExtensions)
}
- if !resp.ProducedAt.Equal(producedAt) {
- t.Errorf("resp.ProducedAt: got %d, want %d", resp.ProducedAt, producedAt)
+ delay := time.Since(resp.ProducedAt)
+ if delay < -time.Hour || delay > time.Hour {
+ t.Errorf("resp.ProducedAt: got %s, want close to current time (%s)", resp.ProducedAt, time.Now())
}
if resp.Status != template.Status {
diff --git a/vendor/golang.org/x/crypto/poly1305/poly1305_test.go b/vendor/golang.org/x/crypto/poly1305/poly1305_test.go
index 7b8ab2fe1..017027fe6 100644
--- a/vendor/golang.org/x/crypto/poly1305/poly1305_test.go
+++ b/vendor/golang.org/x/crypto/poly1305/poly1305_test.go
@@ -6,10 +6,14 @@ package poly1305
import (
"bytes"
+ "encoding/hex"
+ "flag"
"testing"
"unsafe"
)
+var stressFlag = flag.Bool("stress", false, "run slow stress tests")
+
var testData = []struct {
in, k, correct []byte
}{
@@ -88,6 +92,39 @@ func testSum(t *testing.T, unaligned bool) {
}
}
+func TestBurnin(t *testing.T) {
+ // This test can be used to sanity-check significant changes. It can
+ // take about many minutes to run, even on fast machines. It's disabled
+ // by default.
+ if !*stressFlag {
+ t.Skip("skipping without -stress")
+ }
+
+ var key [32]byte
+ var input [25]byte
+ var output [16]byte
+
+ for i := range key {
+ key[i] = 1
+ }
+ for i := range input {
+ input[i] = 2
+ }
+
+ for i := uint64(0); i < 1e10; i++ {
+ Sum(&output, input[:], &key)
+ copy(key[0:], output[:])
+ copy(key[16:], output[:])
+ copy(input[:], output[:])
+ copy(input[16:], output[:])
+ }
+
+ const expected = "5e3b866aea0b636d240c83c428f84bfa"
+ if got := hex.EncodeToString(output[:]); got != expected {
+ t.Errorf("expected %s, got %s", expected, got)
+ }
+}
+
func TestSum(t *testing.T) { testSum(t, false) }
func TestSumUnaligned(t *testing.T) { testSum(t, true) }
diff --git a/vendor/golang.org/x/crypto/poly1305/sum_ref.go b/vendor/golang.org/x/crypto/poly1305/sum_ref.go
index dbe50e78a..b2805a5ca 100644
--- a/vendor/golang.org/x/crypto/poly1305/sum_ref.go
+++ b/vendor/golang.org/x/crypto/poly1305/sum_ref.go
@@ -6,1526 +6,136 @@
package poly1305
-// Based on original, public domain implementation from NaCl by D. J.
-// Bernstein.
+import "encoding/binary"
-import "math"
-
-const (
- alpham80 = 0.00000000558793544769287109375
- alpham48 = 24.0
- alpham16 = 103079215104.0
- alpha0 = 6755399441055744.0
- alpha18 = 1770887431076116955136.0
- alpha32 = 29014219670751100192948224.0
- alpha50 = 7605903601369376408980219232256.0
- alpha64 = 124615124604835863084731911901282304.0
- alpha82 = 32667107224410092492483962313449748299776.0
- alpha96 = 535217884764734955396857238543560676143529984.0
- alpha112 = 35076039295941670036888435985190792471742381031424.0
- alpha130 = 9194973245195333150150082162901855101712434733101613056.0
- scale = 0.0000000000000000000000000000000000000036734198463196484624023016788195177431833298649127735047148490821200539357960224151611328125
- offset0 = 6755408030990331.0
- offset1 = 29014256564239239022116864.0
- offset2 = 124615283061160854719918951570079744.0
- offset3 = 535219245894202480694386063513315216128475136.0
-)
-
-// Sum generates an authenticator for m using a one-time key and puts the
+// Sum generates an authenticator for msg using a one-time key and puts the
// 16-byte result into out. Authenticating two different messages with the same
// key allows an attacker to forge messages at will.
-func Sum(out *[16]byte, m []byte, key *[32]byte) {
- r := key
- s := key[16:]
+func Sum(out *[TagSize]byte, msg []byte, key *[32]byte) {
var (
- y7 float64
- y6 float64
- y1 float64
- y0 float64
- y5 float64
- y4 float64
- x7 float64
- x6 float64
- x1 float64
- x0 float64
- y3 float64
- y2 float64
- x5 float64
- r3lowx0 float64
- x4 float64
- r0lowx6 float64
- x3 float64
- r3highx0 float64
- x2 float64
- r0highx6 float64
- r0lowx0 float64
- sr1lowx6 float64
- r0highx0 float64
- sr1highx6 float64
- sr3low float64
- r1lowx0 float64
- sr2lowx6 float64
- r1highx0 float64
- sr2highx6 float64
- r2lowx0 float64
- sr3lowx6 float64
- r2highx0 float64
- sr3highx6 float64
- r1highx4 float64
- r1lowx4 float64
- r0highx4 float64
- r0lowx4 float64
- sr3highx4 float64
- sr3lowx4 float64
- sr2highx4 float64
- sr2lowx4 float64
- r0lowx2 float64
- r0highx2 float64
- r1lowx2 float64
- r1highx2 float64
- r2lowx2 float64
- r2highx2 float64
- sr3lowx2 float64
- sr3highx2 float64
- z0 float64
- z1 float64
- z2 float64
- z3 float64
- m0 int64
- m1 int64
- m2 int64
- m3 int64
- m00 uint32
- m01 uint32
- m02 uint32
- m03 uint32
- m10 uint32
- m11 uint32
- m12 uint32
- m13 uint32
- m20 uint32
- m21 uint32
- m22 uint32
- m23 uint32
- m30 uint32
- m31 uint32
- m32 uint32
- m33 uint64
- lbelow2 int32
- lbelow3 int32
- lbelow4 int32
- lbelow5 int32
- lbelow6 int32
- lbelow7 int32
- lbelow8 int32
- lbelow9 int32
- lbelow10 int32
- lbelow11 int32
- lbelow12 int32
- lbelow13 int32
- lbelow14 int32
- lbelow15 int32
- s00 uint32
- s01 uint32
- s02 uint32
- s03 uint32
- s10 uint32
- s11 uint32
- s12 uint32
- s13 uint32
- s20 uint32
- s21 uint32
- s22 uint32
- s23 uint32
- s30 uint32
- s31 uint32
- s32 uint32
- s33 uint32
- bits32 uint64
- f uint64
- f0 uint64
- f1 uint64
- f2 uint64
- f3 uint64
- f4 uint64
- g uint64
- g0 uint64
- g1 uint64
- g2 uint64
- g3 uint64
- g4 uint64
+ h0, h1, h2, h3, h4 uint32 // the hash accumulators
+ r0, r1, r2, r3, r4 uint64 // the r part of the key
)
- var p int32
-
- l := int32(len(m))
-
- r00 := uint32(r[0])
-
- r01 := uint32(r[1])
-
- r02 := uint32(r[2])
- r0 := int64(2151)
-
- r03 := uint32(r[3])
- r03 &= 15
- r0 <<= 51
-
- r10 := uint32(r[4])
- r10 &= 252
- r01 <<= 8
- r0 += int64(r00)
-
- r11 := uint32(r[5])
- r02 <<= 16
- r0 += int64(r01)
-
- r12 := uint32(r[6])
- r03 <<= 24
- r0 += int64(r02)
-
- r13 := uint32(r[7])
- r13 &= 15
- r1 := int64(2215)
- r0 += int64(r03)
-
- d0 := r0
- r1 <<= 51
- r2 := int64(2279)
-
- r20 := uint32(r[8])
- r20 &= 252
- r11 <<= 8
- r1 += int64(r10)
-
- r21 := uint32(r[9])
- r12 <<= 16
- r1 += int64(r11)
-
- r22 := uint32(r[10])
- r13 <<= 24
- r1 += int64(r12)
-
- r23 := uint32(r[11])
- r23 &= 15
- r2 <<= 51
- r1 += int64(r13)
-
- d1 := r1
- r21 <<= 8
- r2 += int64(r20)
-
- r30 := uint32(r[12])
- r30 &= 252
- r22 <<= 16
- r2 += int64(r21)
-
- r31 := uint32(r[13])
- r23 <<= 24
- r2 += int64(r22)
-
- r32 := uint32(r[14])
- r2 += int64(r23)
- r3 := int64(2343)
-
- d2 := r2
- r3 <<= 51
-
- r33 := uint32(r[15])
- r33 &= 15
- r31 <<= 8
- r3 += int64(r30)
-
- r32 <<= 16
- r3 += int64(r31)
-
- r33 <<= 24
- r3 += int64(r32)
-
- r3 += int64(r33)
- h0 := alpha32 - alpha32
-
- d3 := r3
- h1 := alpha32 - alpha32
-
- h2 := alpha32 - alpha32
-
- h3 := alpha32 - alpha32
-
- h4 := alpha32 - alpha32
-
- r0low := math.Float64frombits(uint64(d0))
- h5 := alpha32 - alpha32
-
- r1low := math.Float64frombits(uint64(d1))
- h6 := alpha32 - alpha32
-
- r2low := math.Float64frombits(uint64(d2))
- h7 := alpha32 - alpha32
-
- r0low -= alpha0
-
- r1low -= alpha32
-
- r2low -= alpha64
-
- r0high := r0low + alpha18
-
- r3low := math.Float64frombits(uint64(d3))
-
- r1high := r1low + alpha50
- sr1low := scale * r1low
-
- r2high := r2low + alpha82
- sr2low := scale * r2low
-
- r0high -= alpha18
- r0high_stack := r0high
-
- r3low -= alpha96
-
- r1high -= alpha50
- r1high_stack := r1high
-
- sr1high := sr1low + alpham80
-
- r0low -= r0high
-
- r2high -= alpha82
- sr3low = scale * r3low
-
- sr2high := sr2low + alpham48
-
- r1low -= r1high
- r1low_stack := r1low
-
- sr1high -= alpham80
- sr1high_stack := sr1high
-
- r2low -= r2high
- r2low_stack := r2low
-
- sr2high -= alpham48
- sr2high_stack := sr2high
-
- r3high := r3low + alpha112
- r0low_stack := r0low
-
- sr1low -= sr1high
- sr1low_stack := sr1low
-
- sr3high := sr3low + alpham16
- r2high_stack := r2high
-
- sr2low -= sr2high
- sr2low_stack := sr2low
-
- r3high -= alpha112
- r3high_stack := r3high
-
- sr3high -= alpham16
- sr3high_stack := sr3high
-
- r3low -= r3high
- r3low_stack := r3low
-
- sr3low -= sr3high
- sr3low_stack := sr3low
-
- if l < 16 {
- goto addatmost15bytes
- }
-
- m00 = uint32(m[p+0])
- m0 = 2151
-
- m0 <<= 51
- m1 = 2215
- m01 = uint32(m[p+1])
-
- m1 <<= 51
- m2 = 2279
- m02 = uint32(m[p+2])
-
- m2 <<= 51
- m3 = 2343
- m03 = uint32(m[p+3])
-
- m10 = uint32(m[p+4])
- m01 <<= 8
- m0 += int64(m00)
-
- m11 = uint32(m[p+5])
- m02 <<= 16
- m0 += int64(m01)
-
- m12 = uint32(m[p+6])
- m03 <<= 24
- m0 += int64(m02)
-
- m13 = uint32(m[p+7])
- m3 <<= 51
- m0 += int64(m03)
-
- m20 = uint32(m[p+8])
- m11 <<= 8
- m1 += int64(m10)
-
- m21 = uint32(m[p+9])
- m12 <<= 16
- m1 += int64(m11)
-
- m22 = uint32(m[p+10])
- m13 <<= 24
- m1 += int64(m12)
-
- m23 = uint32(m[p+11])
- m1 += int64(m13)
-
- m30 = uint32(m[p+12])
- m21 <<= 8
- m2 += int64(m20)
-
- m31 = uint32(m[p+13])
- m22 <<= 16
- m2 += int64(m21)
-
- m32 = uint32(m[p+14])
- m23 <<= 24
- m2 += int64(m22)
-
- m33 = uint64(m[p+15])
- m2 += int64(m23)
-
- d0 = m0
- m31 <<= 8
- m3 += int64(m30)
-
- d1 = m1
- m32 <<= 16
- m3 += int64(m31)
-
- d2 = m2
- m33 += 256
-
- m33 <<= 24
- m3 += int64(m32)
-
- m3 += int64(m33)
- d3 = m3
-
- p += 16
- l -= 16
-
- z0 = math.Float64frombits(uint64(d0))
-
- z1 = math.Float64frombits(uint64(d1))
-
- z2 = math.Float64frombits(uint64(d2))
-
- z3 = math.Float64frombits(uint64(d3))
-
- z0 -= alpha0
-
- z1 -= alpha32
-
- z2 -= alpha64
-
- z3 -= alpha96
-
- h0 += z0
-
- h1 += z1
-
- h3 += z2
-
- h5 += z3
-
- if l < 16 {
- goto multiplyaddatmost15bytes
+ r0 = uint64(binary.LittleEndian.Uint32(key[0:]) & 0x3ffffff)
+ r1 = uint64((binary.LittleEndian.Uint32(key[3:]) >> 2) & 0x3ffff03)
+ r2 = uint64((binary.LittleEndian.Uint32(key[6:]) >> 4) & 0x3ffc0ff)
+ r3 = uint64((binary.LittleEndian.Uint32(key[9:]) >> 6) & 0x3f03fff)
+ r4 = uint64((binary.LittleEndian.Uint32(key[12:]) >> 8) & 0x00fffff)
+
+ R1, R2, R3, R4 := r1*5, r2*5, r3*5, r4*5
+
+ for len(msg) >= TagSize {
+ // h += msg
+ h0 += binary.LittleEndian.Uint32(msg[0:]) & 0x3ffffff
+ h1 += (binary.LittleEndian.Uint32(msg[3:]) >> 2) & 0x3ffffff
+ h2 += (binary.LittleEndian.Uint32(msg[6:]) >> 4) & 0x3ffffff
+ h3 += (binary.LittleEndian.Uint32(msg[9:]) >> 6) & 0x3ffffff
+ h4 += (binary.LittleEndian.Uint32(msg[12:]) >> 8) | (1 << 24)
+
+ // h *= r
+ d0 := (uint64(h0) * r0) + (uint64(h1) * R4) + (uint64(h2) * R3) + (uint64(h3) * R2) + (uint64(h4) * R1)
+ d1 := (d0 >> 26) + (uint64(h0) * r1) + (uint64(h1) * r0) + (uint64(h2) * R4) + (uint64(h3) * R3) + (uint64(h4) * R2)
+ d2 := (d1 >> 26) + (uint64(h0) * r2) + (uint64(h1) * r1) + (uint64(h2) * r0) + (uint64(h3) * R4) + (uint64(h4) * R3)
+ d3 := (d2 >> 26) + (uint64(h0) * r3) + (uint64(h1) * r2) + (uint64(h2) * r1) + (uint64(h3) * r0) + (uint64(h4) * R4)
+ d4 := (d3 >> 26) + (uint64(h0) * r4) + (uint64(h1) * r3) + (uint64(h2) * r2) + (uint64(h3) * r1) + (uint64(h4) * r0)
+
+ // h %= p
+ h0 = uint32(d0) & 0x3ffffff
+ h1 = uint32(d1) & 0x3ffffff
+ h2 = uint32(d2) & 0x3ffffff
+ h3 = uint32(d3) & 0x3ffffff
+ h4 = uint32(d4) & 0x3ffffff
+
+ h0 += uint32(d4>>26) * 5
+ h1 += h0 >> 26
+ h0 = h0 & 0x3ffffff
+
+ msg = msg[TagSize:]
}
-multiplyaddatleast16bytes:
-
- m2 = 2279
- m20 = uint32(m[p+8])
- y7 = h7 + alpha130
-
- m2 <<= 51
- m3 = 2343
- m21 = uint32(m[p+9])
- y6 = h6 + alpha130
-
- m3 <<= 51
- m0 = 2151
- m22 = uint32(m[p+10])
- y1 = h1 + alpha32
-
- m0 <<= 51
- m1 = 2215
- m23 = uint32(m[p+11])
- y0 = h0 + alpha32
-
- m1 <<= 51
- m30 = uint32(m[p+12])
- y7 -= alpha130
-
- m21 <<= 8
- m2 += int64(m20)
- m31 = uint32(m[p+13])
- y6 -= alpha130
-
- m22 <<= 16
- m2 += int64(m21)
- m32 = uint32(m[p+14])
- y1 -= alpha32
-
- m23 <<= 24
- m2 += int64(m22)
- m33 = uint64(m[p+15])
- y0 -= alpha32
-
- m2 += int64(m23)
- m00 = uint32(m[p+0])
- y5 = h5 + alpha96
-
- m31 <<= 8
- m3 += int64(m30)
- m01 = uint32(m[p+1])
- y4 = h4 + alpha96
-
- m32 <<= 16
- m02 = uint32(m[p+2])
- x7 = h7 - y7
- y7 *= scale
-
- m33 += 256
- m03 = uint32(m[p+3])
- x6 = h6 - y6
- y6 *= scale
-
- m33 <<= 24
- m3 += int64(m31)
- m10 = uint32(m[p+4])
- x1 = h1 - y1
-
- m01 <<= 8
- m3 += int64(m32)
- m11 = uint32(m[p+5])
- x0 = h0 - y0
-
- m3 += int64(m33)
- m0 += int64(m00)
- m12 = uint32(m[p+6])
- y5 -= alpha96
-
- m02 <<= 16
- m0 += int64(m01)
- m13 = uint32(m[p+7])
- y4 -= alpha96
-
- m03 <<= 24
- m0 += int64(m02)
- d2 = m2
- x1 += y7
-
- m0 += int64(m03)
- d3 = m3
- x0 += y6
-
- m11 <<= 8
- m1 += int64(m10)
- d0 = m0
- x7 += y5
-
- m12 <<= 16
- m1 += int64(m11)
- x6 += y4
-
- m13 <<= 24
- m1 += int64(m12)
- y3 = h3 + alpha64
-
- m1 += int64(m13)
- d1 = m1
- y2 = h2 + alpha64
-
- x0 += x1
-
- x6 += x7
-
- y3 -= alpha64
- r3low = r3low_stack
-
- y2 -= alpha64
- r0low = r0low_stack
-
- x5 = h5 - y5
- r3lowx0 = r3low * x0
- r3high = r3high_stack
-
- x4 = h4 - y4
- r0lowx6 = r0low * x6
- r0high = r0high_stack
-
- x3 = h3 - y3
- r3highx0 = r3high * x0
- sr1low = sr1low_stack
-
- x2 = h2 - y2
- r0highx6 = r0high * x6
- sr1high = sr1high_stack
-
- x5 += y3
- r0lowx0 = r0low * x0
- r1low = r1low_stack
-
- h6 = r3lowx0 + r0lowx6
- sr1lowx6 = sr1low * x6
- r1high = r1high_stack
-
- x4 += y2
- r0highx0 = r0high * x0
- sr2low = sr2low_stack
-
- h7 = r3highx0 + r0highx6
- sr1highx6 = sr1high * x6
- sr2high = sr2high_stack
-
- x3 += y1
- r1lowx0 = r1low * x0
- r2low = r2low_stack
-
- h0 = r0lowx0 + sr1lowx6
- sr2lowx6 = sr2low * x6
- r2high = r2high_stack
-
- x2 += y0
- r1highx0 = r1high * x0
- sr3low = sr3low_stack
-
- h1 = r0highx0 + sr1highx6
- sr2highx6 = sr2high * x6
- sr3high = sr3high_stack
-
- x4 += x5
- r2lowx0 = r2low * x0
- z2 = math.Float64frombits(uint64(d2))
-
- h2 = r1lowx0 + sr2lowx6
- sr3lowx6 = sr3low * x6
-
- x2 += x3
- r2highx0 = r2high * x0
- z3 = math.Float64frombits(uint64(d3))
-
- h3 = r1highx0 + sr2highx6
- sr3highx6 = sr3high * x6
-
- r1highx4 = r1high * x4
- z2 -= alpha64
-
- h4 = r2lowx0 + sr3lowx6
- r1lowx4 = r1low * x4
-
- r0highx4 = r0high * x4
- z3 -= alpha96
-
- h5 = r2highx0 + sr3highx6
- r0lowx4 = r0low * x4
-
- h7 += r1highx4
- sr3highx4 = sr3high * x4
-
- h6 += r1lowx4
- sr3lowx4 = sr3low * x4
-
- h5 += r0highx4
- sr2highx4 = sr2high * x4
-
- h4 += r0lowx4
- sr2lowx4 = sr2low * x4
-
- h3 += sr3highx4
- r0lowx2 = r0low * x2
-
- h2 += sr3lowx4
- r0highx2 = r0high * x2
-
- h1 += sr2highx4
- r1lowx2 = r1low * x2
-
- h0 += sr2lowx4
- r1highx2 = r1high * x2
-
- h2 += r0lowx2
- r2lowx2 = r2low * x2
-
- h3 += r0highx2
- r2highx2 = r2high * x2
-
- h4 += r1lowx2
- sr3lowx2 = sr3low * x2
-
- h5 += r1highx2
- sr3highx2 = sr3high * x2
-
- p += 16
- l -= 16
- h6 += r2lowx2
-
- h7 += r2highx2
-
- z1 = math.Float64frombits(uint64(d1))
- h0 += sr3lowx2
-
- z0 = math.Float64frombits(uint64(d0))
- h1 += sr3highx2
-
- z1 -= alpha32
-
- z0 -= alpha0
-
- h5 += z3
-
- h3 += z2
-
- h1 += z1
-
- h0 += z0
-
- if l >= 16 {
- goto multiplyaddatleast16bytes
- }
-
-multiplyaddatmost15bytes:
-
- y7 = h7 + alpha130
-
- y6 = h6 + alpha130
-
- y1 = h1 + alpha32
-
- y0 = h0 + alpha32
-
- y7 -= alpha130
-
- y6 -= alpha130
-
- y1 -= alpha32
-
- y0 -= alpha32
-
- y5 = h5 + alpha96
-
- y4 = h4 + alpha96
-
- x7 = h7 - y7
- y7 *= scale
-
- x6 = h6 - y6
- y6 *= scale
-
- x1 = h1 - y1
-
- x0 = h0 - y0
-
- y5 -= alpha96
-
- y4 -= alpha96
-
- x1 += y7
-
- x0 += y6
-
- x7 += y5
-
- x6 += y4
-
- y3 = h3 + alpha64
-
- y2 = h2 + alpha64
-
- x0 += x1
-
- x6 += x7
-
- y3 -= alpha64
- r3low = r3low_stack
-
- y2 -= alpha64
- r0low = r0low_stack
-
- x5 = h5 - y5
- r3lowx0 = r3low * x0
- r3high = r3high_stack
-
- x4 = h4 - y4
- r0lowx6 = r0low * x6
- r0high = r0high_stack
-
- x3 = h3 - y3
- r3highx0 = r3high * x0
- sr1low = sr1low_stack
-
- x2 = h2 - y2
- r0highx6 = r0high * x6
- sr1high = sr1high_stack
-
- x5 += y3
- r0lowx0 = r0low * x0
- r1low = r1low_stack
-
- h6 = r3lowx0 + r0lowx6
- sr1lowx6 = sr1low * x6
- r1high = r1high_stack
-
- x4 += y2
- r0highx0 = r0high * x0
- sr2low = sr2low_stack
-
- h7 = r3highx0 + r0highx6
- sr1highx6 = sr1high * x6
- sr2high = sr2high_stack
-
- x3 += y1
- r1lowx0 = r1low * x0
- r2low = r2low_stack
-
- h0 = r0lowx0 + sr1lowx6
- sr2lowx6 = sr2low * x6
- r2high = r2high_stack
-
- x2 += y0
- r1highx0 = r1high * x0
- sr3low = sr3low_stack
-
- h1 = r0highx0 + sr1highx6
- sr2highx6 = sr2high * x6
- sr3high = sr3high_stack
-
- x4 += x5
- r2lowx0 = r2low * x0
-
- h2 = r1lowx0 + sr2lowx6
- sr3lowx6 = sr3low * x6
-
- x2 += x3
- r2highx0 = r2high * x0
-
- h3 = r1highx0 + sr2highx6
- sr3highx6 = sr3high * x6
-
- r1highx4 = r1high * x4
-
- h4 = r2lowx0 + sr3lowx6
- r1lowx4 = r1low * x4
-
- r0highx4 = r0high * x4
-
- h5 = r2highx0 + sr3highx6
- r0lowx4 = r0low * x4
-
- h7 += r1highx4
- sr3highx4 = sr3high * x4
-
- h6 += r1lowx4
- sr3lowx4 = sr3low * x4
-
- h5 += r0highx4
- sr2highx4 = sr2high * x4
-
- h4 += r0lowx4
- sr2lowx4 = sr2low * x4
-
- h3 += sr3highx4
- r0lowx2 = r0low * x2
-
- h2 += sr3lowx4
- r0highx2 = r0high * x2
-
- h1 += sr2highx4
- r1lowx2 = r1low * x2
-
- h0 += sr2lowx4
- r1highx2 = r1high * x2
-
- h2 += r0lowx2
- r2lowx2 = r2low * x2
-
- h3 += r0highx2
- r2highx2 = r2high * x2
-
- h4 += r1lowx2
- sr3lowx2 = sr3low * x2
-
- h5 += r1highx2
- sr3highx2 = sr3high * x2
-
- h6 += r2lowx2
-
- h7 += r2highx2
-
- h0 += sr3lowx2
-
- h1 += sr3highx2
-
-addatmost15bytes:
-
- if l == 0 {
- goto nomorebytes
+ if len(msg) > 0 {
+ var block [TagSize]byte
+ off := copy(block[:], msg)
+ block[off] = 0x01
+
+ // h += msg
+ h0 += binary.LittleEndian.Uint32(block[0:]) & 0x3ffffff
+ h1 += (binary.LittleEndian.Uint32(block[3:]) >> 2) & 0x3ffffff
+ h2 += (binary.LittleEndian.Uint32(block[6:]) >> 4) & 0x3ffffff
+ h3 += (binary.LittleEndian.Uint32(block[9:]) >> 6) & 0x3ffffff
+ h4 += (binary.LittleEndian.Uint32(block[12:]) >> 8)
+
+ // h *= r
+ d0 := (uint64(h0) * r0) + (uint64(h1) * R4) + (uint64(h2) * R3) + (uint64(h3) * R2) + (uint64(h4) * R1)
+ d1 := (d0 >> 26) + (uint64(h0) * r1) + (uint64(h1) * r0) + (uint64(h2) * R4) + (uint64(h3) * R3) + (uint64(h4) * R2)
+ d2 := (d1 >> 26) + (uint64(h0) * r2) + (uint64(h1) * r1) + (uint64(h2) * r0) + (uint64(h3) * R4) + (uint64(h4) * R3)
+ d3 := (d2 >> 26) + (uint64(h0) * r3) + (uint64(h1) * r2) + (uint64(h2) * r1) + (uint64(h3) * r0) + (uint64(h4) * R4)
+ d4 := (d3 >> 26) + (uint64(h0) * r4) + (uint64(h1) * r3) + (uint64(h2) * r2) + (uint64(h3) * r1) + (uint64(h4) * r0)
+
+ // h %= p
+ h0 = uint32(d0) & 0x3ffffff
+ h1 = uint32(d1) & 0x3ffffff
+ h2 = uint32(d2) & 0x3ffffff
+ h3 = uint32(d3) & 0x3ffffff
+ h4 = uint32(d4) & 0x3ffffff
+
+ h0 += uint32(d4>>26) * 5
+ h1 += h0 >> 26
+ h0 = h0 & 0x3ffffff
}
- lbelow2 = l - 2
-
- lbelow3 = l - 3
-
- lbelow2 >>= 31
- lbelow4 = l - 4
-
- m00 = uint32(m[p+0])
- lbelow3 >>= 31
- p += lbelow2
-
- m01 = uint32(m[p+1])
- lbelow4 >>= 31
- p += lbelow3
-
- m02 = uint32(m[p+2])
- p += lbelow4
- m0 = 2151
-
- m03 = uint32(m[p+3])
- m0 <<= 51
- m1 = 2215
-
- m0 += int64(m00)
- m01 &^= uint32(lbelow2)
-
- m02 &^= uint32(lbelow3)
- m01 -= uint32(lbelow2)
-
- m01 <<= 8
- m03 &^= uint32(lbelow4)
-
- m0 += int64(m01)
- lbelow2 -= lbelow3
-
- m02 += uint32(lbelow2)
- lbelow3 -= lbelow4
-
- m02 <<= 16
- m03 += uint32(lbelow3)
-
- m03 <<= 24
- m0 += int64(m02)
-
- m0 += int64(m03)
- lbelow5 = l - 5
-
- lbelow6 = l - 6
- lbelow7 = l - 7
-
- lbelow5 >>= 31
- lbelow8 = l - 8
-
- lbelow6 >>= 31
- p += lbelow5
-
- m10 = uint32(m[p+4])
- lbelow7 >>= 31
- p += lbelow6
-
- m11 = uint32(m[p+5])
- lbelow8 >>= 31
- p += lbelow7
-
- m12 = uint32(m[p+6])
- m1 <<= 51
- p += lbelow8
-
- m13 = uint32(m[p+7])
- m10 &^= uint32(lbelow5)
- lbelow4 -= lbelow5
-
- m10 += uint32(lbelow4)
- lbelow5 -= lbelow6
-
- m11 &^= uint32(lbelow6)
- m11 += uint32(lbelow5)
-
- m11 <<= 8
- m1 += int64(m10)
-
- m1 += int64(m11)
- m12 &^= uint32(lbelow7)
-
- lbelow6 -= lbelow7
- m13 &^= uint32(lbelow8)
-
- m12 += uint32(lbelow6)
- lbelow7 -= lbelow8
-
- m12 <<= 16
- m13 += uint32(lbelow7)
-
- m13 <<= 24
- m1 += int64(m12)
-
- m1 += int64(m13)
- m2 = 2279
-
- lbelow9 = l - 9
- m3 = 2343
-
- lbelow10 = l - 10
- lbelow11 = l - 11
-
- lbelow9 >>= 31
- lbelow12 = l - 12
-
- lbelow10 >>= 31
- p += lbelow9
-
- m20 = uint32(m[p+8])
- lbelow11 >>= 31
- p += lbelow10
-
- m21 = uint32(m[p+9])
- lbelow12 >>= 31
- p += lbelow11
-
- m22 = uint32(m[p+10])
- m2 <<= 51
- p += lbelow12
-
- m23 = uint32(m[p+11])
- m20 &^= uint32(lbelow9)
- lbelow8 -= lbelow9
-
- m20 += uint32(lbelow8)
- lbelow9 -= lbelow10
-
- m21 &^= uint32(lbelow10)
- m21 += uint32(lbelow9)
-
- m21 <<= 8
- m2 += int64(m20)
-
- m2 += int64(m21)
- m22 &^= uint32(lbelow11)
-
- lbelow10 -= lbelow11
- m23 &^= uint32(lbelow12)
-
- m22 += uint32(lbelow10)
- lbelow11 -= lbelow12
-
- m22 <<= 16
- m23 += uint32(lbelow11)
-
- m23 <<= 24
- m2 += int64(m22)
-
- m3 <<= 51
- lbelow13 = l - 13
-
- lbelow13 >>= 31
- lbelow14 = l - 14
-
- lbelow14 >>= 31
- p += lbelow13
- lbelow15 = l - 15
-
- m30 = uint32(m[p+12])
- lbelow15 >>= 31
- p += lbelow14
-
- m31 = uint32(m[p+13])
- p += lbelow15
- m2 += int64(m23)
-
- m32 = uint32(m[p+14])
- m30 &^= uint32(lbelow13)
- lbelow12 -= lbelow13
-
- m30 += uint32(lbelow12)
- lbelow13 -= lbelow14
-
- m3 += int64(m30)
- m31 &^= uint32(lbelow14)
-
- m31 += uint32(lbelow13)
- m32 &^= uint32(lbelow15)
-
- m31 <<= 8
- lbelow14 -= lbelow15
-
- m3 += int64(m31)
- m32 += uint32(lbelow14)
- d0 = m0
-
- m32 <<= 16
- m33 = uint64(lbelow15 + 1)
- d1 = m1
-
- m33 <<= 24
- m3 += int64(m32)
- d2 = m2
-
- m3 += int64(m33)
- d3 = m3
-
- z3 = math.Float64frombits(uint64(d3))
-
- z2 = math.Float64frombits(uint64(d2))
-
- z1 = math.Float64frombits(uint64(d1))
-
- z0 = math.Float64frombits(uint64(d0))
-
- z3 -= alpha96
-
- z2 -= alpha64
-
- z1 -= alpha32
-
- z0 -= alpha0
-
- h5 += z3
-
- h3 += z2
-
- h1 += z1
-
- h0 += z0
-
- y7 = h7 + alpha130
-
- y6 = h6 + alpha130
-
- y1 = h1 + alpha32
-
- y0 = h0 + alpha32
-
- y7 -= alpha130
-
- y6 -= alpha130
-
- y1 -= alpha32
-
- y0 -= alpha32
-
- y5 = h5 + alpha96
-
- y4 = h4 + alpha96
-
- x7 = h7 - y7
- y7 *= scale
-
- x6 = h6 - y6
- y6 *= scale
-
- x1 = h1 - y1
-
- x0 = h0 - y0
-
- y5 -= alpha96
-
- y4 -= alpha96
-
- x1 += y7
-
- x0 += y6
-
- x7 += y5
-
- x6 += y4
-
- y3 = h3 + alpha64
-
- y2 = h2 + alpha64
-
- x0 += x1
-
- x6 += x7
-
- y3 -= alpha64
- r3low = r3low_stack
-
- y2 -= alpha64
- r0low = r0low_stack
-
- x5 = h5 - y5
- r3lowx0 = r3low * x0
- r3high = r3high_stack
-
- x4 = h4 - y4
- r0lowx6 = r0low * x6
- r0high = r0high_stack
-
- x3 = h3 - y3
- r3highx0 = r3high * x0
- sr1low = sr1low_stack
-
- x2 = h2 - y2
- r0highx6 = r0high * x6
- sr1high = sr1high_stack
-
- x5 += y3
- r0lowx0 = r0low * x0
- r1low = r1low_stack
-
- h6 = r3lowx0 + r0lowx6
- sr1lowx6 = sr1low * x6
- r1high = r1high_stack
-
- x4 += y2
- r0highx0 = r0high * x0
- sr2low = sr2low_stack
-
- h7 = r3highx0 + r0highx6
- sr1highx6 = sr1high * x6
- sr2high = sr2high_stack
-
- x3 += y1
- r1lowx0 = r1low * x0
- r2low = r2low_stack
-
- h0 = r0lowx0 + sr1lowx6
- sr2lowx6 = sr2low * x6
- r2high = r2high_stack
-
- x2 += y0
- r1highx0 = r1high * x0
- sr3low = sr3low_stack
-
- h1 = r0highx0 + sr1highx6
- sr2highx6 = sr2high * x6
- sr3high = sr3high_stack
-
- x4 += x5
- r2lowx0 = r2low * x0
-
- h2 = r1lowx0 + sr2lowx6
- sr3lowx6 = sr3low * x6
-
- x2 += x3
- r2highx0 = r2high * x0
-
- h3 = r1highx0 + sr2highx6
- sr3highx6 = sr3high * x6
-
- r1highx4 = r1high * x4
-
- h4 = r2lowx0 + sr3lowx6
- r1lowx4 = r1low * x4
-
- r0highx4 = r0high * x4
-
- h5 = r2highx0 + sr3highx6
- r0lowx4 = r0low * x4
-
- h7 += r1highx4
- sr3highx4 = sr3high * x4
-
- h6 += r1lowx4
- sr3lowx4 = sr3low * x4
-
- h5 += r0highx4
- sr2highx4 = sr2high * x4
-
- h4 += r0lowx4
- sr2lowx4 = sr2low * x4
-
- h3 += sr3highx4
- r0lowx2 = r0low * x2
-
- h2 += sr3lowx4
- r0highx2 = r0high * x2
-
- h1 += sr2highx4
- r1lowx2 = r1low * x2
-
- h0 += sr2lowx4
- r1highx2 = r1high * x2
-
- h2 += r0lowx2
- r2lowx2 = r2low * x2
-
- h3 += r0highx2
- r2highx2 = r2high * x2
-
- h4 += r1lowx2
- sr3lowx2 = sr3low * x2
-
- h5 += r1highx2
- sr3highx2 = sr3high * x2
-
- h6 += r2lowx2
-
- h7 += r2highx2
-
- h0 += sr3lowx2
-
- h1 += sr3highx2
-
-nomorebytes:
-
- y7 = h7 + alpha130
-
- y0 = h0 + alpha32
-
- y1 = h1 + alpha32
-
- y2 = h2 + alpha64
-
- y7 -= alpha130
-
- y3 = h3 + alpha64
-
- y4 = h4 + alpha96
-
- y5 = h5 + alpha96
-
- x7 = h7 - y7
- y7 *= scale
-
- y0 -= alpha32
-
- y1 -= alpha32
-
- y2 -= alpha64
-
- h6 += x7
-
- y3 -= alpha64
-
- y4 -= alpha96
-
- y5 -= alpha96
-
- y6 = h6 + alpha130
-
- x0 = h0 - y0
-
- x1 = h1 - y1
-
- x2 = h2 - y2
-
- y6 -= alpha130
-
- x0 += y7
-
- x3 = h3 - y3
-
- x4 = h4 - y4
-
- x5 = h5 - y5
-
- x6 = h6 - y6
-
- y6 *= scale
-
- x2 += y0
-
- x3 += y1
-
- x4 += y2
-
- x0 += y6
-
- x5 += y3
-
- x6 += y4
-
- x2 += x3
-
- x0 += x1
-
- x4 += x5
-
- x6 += y5
-
- x2 += offset1
- d1 = int64(math.Float64bits(x2))
-
- x0 += offset0
- d0 = int64(math.Float64bits(x0))
-
- x4 += offset2
- d2 = int64(math.Float64bits(x4))
-
- x6 += offset3
- d3 = int64(math.Float64bits(x6))
-
- f0 = uint64(d0)
-
- f1 = uint64(d1)
- bits32 = math.MaxUint64
-
- f2 = uint64(d2)
- bits32 >>= 32
-
- f3 = uint64(d3)
- f = f0 >> 32
-
- f0 &= bits32
- f &= 255
-
- f1 += f
- g0 = f0 + 5
-
- g = g0 >> 32
- g0 &= bits32
-
- f = f1 >> 32
- f1 &= bits32
-
- f &= 255
- g1 = f1 + g
-
- g = g1 >> 32
- f2 += f
-
- f = f2 >> 32
- g1 &= bits32
-
- f2 &= bits32
- f &= 255
-
- f3 += f
- g2 = f2 + g
-
- g = g2 >> 32
- g2 &= bits32
-
- f4 = f3 >> 32
- f3 &= bits32
-
- f4 &= 255
- g3 = f3 + g
-
- g = g3 >> 32
- g3 &= bits32
-
- g4 = f4 + g
-
- g4 = g4 - 4
- s00 = uint32(s[0])
-
- f = uint64(int64(g4) >> 63)
- s01 = uint32(s[1])
-
- f0 &= f
- g0 &^= f
- s02 = uint32(s[2])
-
- f1 &= f
- f0 |= g0
- s03 = uint32(s[3])
-
- g1 &^= f
- f2 &= f
- s10 = uint32(s[4])
-
- f3 &= f
- g2 &^= f
- s11 = uint32(s[5])
-
- g3 &^= f
- f1 |= g1
- s12 = uint32(s[6])
-
- f2 |= g2
- f3 |= g3
- s13 = uint32(s[7])
-
- s01 <<= 8
- f0 += uint64(s00)
- s20 = uint32(s[8])
-
- s02 <<= 16
- f0 += uint64(s01)
- s21 = uint32(s[9])
-
- s03 <<= 24
- f0 += uint64(s02)
- s22 = uint32(s[10])
-
- s11 <<= 8
- f1 += uint64(s10)
- s23 = uint32(s[11])
-
- s12 <<= 16
- f1 += uint64(s11)
- s30 = uint32(s[12])
-
- s13 <<= 24
- f1 += uint64(s12)
- s31 = uint32(s[13])
-
- f0 += uint64(s03)
- f1 += uint64(s13)
- s32 = uint32(s[14])
-
- s21 <<= 8
- f2 += uint64(s20)
- s33 = uint32(s[15])
-
- s22 <<= 16
- f2 += uint64(s21)
-
- s23 <<= 24
- f2 += uint64(s22)
-
- s31 <<= 8
- f3 += uint64(s30)
-
- s32 <<= 16
- f3 += uint64(s31)
-
- s33 <<= 24
- f3 += uint64(s32)
-
- f2 += uint64(s23)
- f3 += uint64(s33)
-
- out[0] = byte(f0)
- f0 >>= 8
- out[1] = byte(f0)
- f0 >>= 8
- out[2] = byte(f0)
- f0 >>= 8
- out[3] = byte(f0)
- f0 >>= 8
- f1 += f0
-
- out[4] = byte(f1)
- f1 >>= 8
- out[5] = byte(f1)
- f1 >>= 8
- out[6] = byte(f1)
- f1 >>= 8
- out[7] = byte(f1)
- f1 >>= 8
- f2 += f1
-
- out[8] = byte(f2)
- f2 >>= 8
- out[9] = byte(f2)
- f2 >>= 8
- out[10] = byte(f2)
- f2 >>= 8
- out[11] = byte(f2)
- f2 >>= 8
- f3 += f2
-
- out[12] = byte(f3)
- f3 >>= 8
- out[13] = byte(f3)
- f3 >>= 8
- out[14] = byte(f3)
- f3 >>= 8
- out[15] = byte(f3)
+ // h %= p reduction
+ h2 += h1 >> 26
+ h1 &= 0x3ffffff
+ h3 += h2 >> 26
+ h2 &= 0x3ffffff
+ h4 += h3 >> 26
+ h3 &= 0x3ffffff
+ h0 += 5 * (h4 >> 26)
+ h4 &= 0x3ffffff
+ h1 += h0 >> 26
+ h0 &= 0x3ffffff
+
+ // h - p
+ t0 := h0 + 5
+ t1 := h1 + (t0 >> 26)
+ t2 := h2 + (t1 >> 26)
+ t3 := h3 + (t2 >> 26)
+ t4 := h4 + (t3 >> 26) - (1 << 26)
+ t0 &= 0x3ffffff
+ t1 &= 0x3ffffff
+ t2 &= 0x3ffffff
+ t3 &= 0x3ffffff
+
+ // select h if h < p else h - p
+ t_mask := (t4 >> 31) - 1
+ h_mask := ^t_mask
+ h0 = (h0 & h_mask) | (t0 & t_mask)
+ h1 = (h1 & h_mask) | (t1 & t_mask)
+ h2 = (h2 & h_mask) | (t2 & t_mask)
+ h3 = (h3 & h_mask) | (t3 & t_mask)
+ h4 = (h4 & h_mask) | (t4 & t_mask)
+
+ // h %= 2^128
+ h0 |= h1 << 26
+ h1 = ((h1 >> 6) | (h2 << 20))
+ h2 = ((h2 >> 12) | (h3 << 14))
+ h3 = ((h3 >> 18) | (h4 << 8))
+
+ // s: the s part of the key
+ // tag = (h + s) % (2^128)
+ t := uint64(h0) + uint64(binary.LittleEndian.Uint32(key[16:]))
+ h0 = uint32(t)
+ t = uint64(h1) + uint64(binary.LittleEndian.Uint32(key[20:])) + (t >> 32)
+ h1 = uint32(t)
+ t = uint64(h2) + uint64(binary.LittleEndian.Uint32(key[24:])) + (t >> 32)
+ h2 = uint32(t)
+ t = uint64(h3) + uint64(binary.LittleEndian.Uint32(key[28:])) + (t >> 32)
+ h3 = uint32(t)
+
+ binary.LittleEndian.PutUint32(out[0:], h0)
+ binary.LittleEndian.PutUint32(out[4:], h1)
+ binary.LittleEndian.PutUint32(out[8:], h2)
+ binary.LittleEndian.PutUint32(out[12:], h3)
}
diff --git a/vendor/golang.org/x/crypto/ssh/agent/client_test.go b/vendor/golang.org/x/crypto/ssh/agent/client_test.go
index e33d47138..a13a65001 100644
--- a/vendor/golang.org/x/crypto/ssh/agent/client_test.go
+++ b/vendor/golang.org/x/crypto/ssh/agent/client_test.go
@@ -180,7 +180,7 @@ func TestCert(t *testing.T) {
// therefore is buffered (net.Pipe deadlocks if both sides start with
// a write.)
func netPipe() (net.Conn, net.Conn, error) {
- listener, err := net.Listen("tcp", "127.0.0.1:0")
+ listener, err := net.Listen("tcp", ":0")
if err != nil {
return nil, nil, err
}
diff --git a/vendor/golang.org/x/crypto/ssh/cipher.go b/vendor/golang.org/x/crypto/ssh/cipher.go
index 34d3917c4..13484ab4b 100644
--- a/vendor/golang.org/x/crypto/ssh/cipher.go
+++ b/vendor/golang.org/x/crypto/ssh/cipher.go
@@ -135,6 +135,7 @@ const prefixLen = 5
type streamPacketCipher struct {
mac hash.Hash
cipher cipher.Stream
+ etm bool
// The following members are to avoid per-packet allocations.
prefix [prefixLen]byte
@@ -150,7 +151,14 @@ func (s *streamPacketCipher) readPacket(seqNum uint32, r io.Reader) ([]byte, err
return nil, err
}
- s.cipher.XORKeyStream(s.prefix[:], s.prefix[:])
+ var encryptedPaddingLength [1]byte
+ if s.mac != nil && s.etm {
+ copy(encryptedPaddingLength[:], s.prefix[4:5])
+ s.cipher.XORKeyStream(s.prefix[4:5], s.prefix[4:5])
+ } else {
+ s.cipher.XORKeyStream(s.prefix[:], s.prefix[:])
+ }
+
length := binary.BigEndian.Uint32(s.prefix[0:4])
paddingLength := uint32(s.prefix[4])
@@ -159,7 +167,12 @@ func (s *streamPacketCipher) readPacket(seqNum uint32, r io.Reader) ([]byte, err
s.mac.Reset()
binary.BigEndian.PutUint32(s.seqNumBytes[:], seqNum)
s.mac.Write(s.seqNumBytes[:])
- s.mac.Write(s.prefix[:])
+ if s.etm {
+ s.mac.Write(s.prefix[:4])
+ s.mac.Write(encryptedPaddingLength[:])
+ } else {
+ s.mac.Write(s.prefix[:])
+ }
macSize = uint32(s.mac.Size())
}
@@ -184,10 +197,17 @@ func (s *streamPacketCipher) readPacket(seqNum uint32, r io.Reader) ([]byte, err
}
mac := s.packetData[length-1:]
data := s.packetData[:length-1]
+
+ if s.mac != nil && s.etm {
+ s.mac.Write(data)
+ }
+
s.cipher.XORKeyStream(data, data)
if s.mac != nil {
- s.mac.Write(data)
+ if !s.etm {
+ s.mac.Write(data)
+ }
s.macResult = s.mac.Sum(s.macResult[:0])
if subtle.ConstantTimeCompare(s.macResult, mac) != 1 {
return nil, errors.New("ssh: MAC failure")
@@ -203,7 +223,13 @@ func (s *streamPacketCipher) writePacket(seqNum uint32, w io.Writer, rand io.Rea
return errors.New("ssh: packet too large")
}
- paddingLength := packetSizeMultiple - (prefixLen+len(packet))%packetSizeMultiple
+ aadlen := 0
+ if s.mac != nil && s.etm {
+ // packet length is not encrypted for EtM modes
+ aadlen = 4
+ }
+
+ paddingLength := packetSizeMultiple - (prefixLen+len(packet)-aadlen)%packetSizeMultiple
if paddingLength < 4 {
paddingLength += packetSizeMultiple
}
@@ -220,15 +246,37 @@ func (s *streamPacketCipher) writePacket(seqNum uint32, w io.Writer, rand io.Rea
s.mac.Reset()
binary.BigEndian.PutUint32(s.seqNumBytes[:], seqNum)
s.mac.Write(s.seqNumBytes[:])
+
+ if s.etm {
+ // For EtM algorithms, the packet length must stay unencrypted,
+ // but the following data (padding length) must be encrypted
+ s.cipher.XORKeyStream(s.prefix[4:5], s.prefix[4:5])
+ }
+
s.mac.Write(s.prefix[:])
- s.mac.Write(packet)
- s.mac.Write(padding)
+
+ if !s.etm {
+ // For non-EtM algorithms, the algorithm is applied on unencrypted data
+ s.mac.Write(packet)
+ s.mac.Write(padding)
+ }
+ }
+
+ if !(s.mac != nil && s.etm) {
+ // For EtM algorithms, the padding length has already been encrypted
+ // and the packet length must remain unencrypted
+ s.cipher.XORKeyStream(s.prefix[:], s.prefix[:])
}
- s.cipher.XORKeyStream(s.prefix[:], s.prefix[:])
s.cipher.XORKeyStream(packet, packet)
s.cipher.XORKeyStream(padding, padding)
+ if s.mac != nil && s.etm {
+ // For EtM algorithms, packet and padding must be encrypted
+ s.mac.Write(packet)
+ s.mac.Write(padding)
+ }
+
if _, err := w.Write(s.prefix[:]); err != nil {
return err
}
diff --git a/vendor/golang.org/x/crypto/ssh/cipher_test.go b/vendor/golang.org/x/crypto/ssh/cipher_test.go
index eced8d851..5cfa17a62 100644
--- a/vendor/golang.org/x/crypto/ssh/cipher_test.go
+++ b/vendor/golang.org/x/crypto/ssh/cipher_test.go
@@ -26,39 +26,41 @@ func TestPacketCiphers(t *testing.T) {
defer delete(cipherModes, aes128cbcID)
for cipher := range cipherModes {
- kr := &kexResult{Hash: crypto.SHA1}
- algs := directionAlgorithms{
- Cipher: cipher,
- MAC: "hmac-sha1",
- Compression: "none",
- }
- client, err := newPacketCipher(clientKeys, algs, kr)
- if err != nil {
- t.Errorf("newPacketCipher(client, %q): %v", cipher, err)
- continue
- }
- server, err := newPacketCipher(clientKeys, algs, kr)
- if err != nil {
- t.Errorf("newPacketCipher(client, %q): %v", cipher, err)
- continue
- }
-
- want := "bla bla"
- input := []byte(want)
- buf := &bytes.Buffer{}
- if err := client.writePacket(0, buf, rand.Reader, input); err != nil {
- t.Errorf("writePacket(%q): %v", cipher, err)
- continue
- }
-
- packet, err := server.readPacket(0, buf)
- if err != nil {
- t.Errorf("readPacket(%q): %v", cipher, err)
- continue
- }
-
- if string(packet) != want {
- t.Errorf("roundtrip(%q): got %q, want %q", cipher, packet, want)
+ for mac := range macModes {
+ kr := &kexResult{Hash: crypto.SHA1}
+ algs := directionAlgorithms{
+ Cipher: cipher,
+ MAC: mac,
+ Compression: "none",
+ }
+ client, err := newPacketCipher(clientKeys, algs, kr)
+ if err != nil {
+ t.Errorf("newPacketCipher(client, %q, %q): %v", cipher, mac, err)
+ continue
+ }
+ server, err := newPacketCipher(clientKeys, algs, kr)
+ if err != nil {
+ t.Errorf("newPacketCipher(client, %q, %q): %v", cipher, mac, err)
+ continue
+ }
+
+ want := "bla bla"
+ input := []byte(want)
+ buf := &bytes.Buffer{}
+ if err := client.writePacket(0, buf, rand.Reader, input); err != nil {
+ t.Errorf("writePacket(%q, %q): %v", cipher, mac, err)
+ continue
+ }
+
+ packet, err := server.readPacket(0, buf)
+ if err != nil {
+ t.Errorf("readPacket(%q, %q): %v", cipher, mac, err)
+ continue
+ }
+
+ if string(packet) != want {
+ t.Errorf("roundtrip(%q, %q): got %q, want %q", cipher, mac, packet, want)
+ }
}
}
}
diff --git a/vendor/golang.org/x/crypto/ssh/client_auth_test.go b/vendor/golang.org/x/crypto/ssh/client_auth_test.go
index 1d9681a06..e384c796b 100644
--- a/vendor/golang.org/x/crypto/ssh/client_auth_test.go
+++ b/vendor/golang.org/x/crypto/ssh/client_auth_test.go
@@ -333,14 +333,14 @@ func TestClientLoginCert(t *testing.T) {
}
// allowed source address
- cert.CriticalOptions = map[string]string{"source-address": "127.0.0.42/24"}
+ cert.CriticalOptions = map[string]string{"source-address": "127.0.0.42/24,::42/120"}
cert.SignCert(rand.Reader, testSigners["ecdsa"])
if err := tryAuth(t, clientConfig); err != nil {
t.Errorf("cert login with source-address failed: %v", err)
}
// disallowed source address
- cert.CriticalOptions = map[string]string{"source-address": "127.0.0.42"}
+ cert.CriticalOptions = map[string]string{"source-address": "127.0.0.42,::42"}
cert.SignCert(rand.Reader, testSigners["ecdsa"])
if err := tryAuth(t, clientConfig); err == nil {
t.Errorf("cert login with source-address succeeded")
diff --git a/vendor/golang.org/x/crypto/ssh/common.go b/vendor/golang.org/x/crypto/ssh/common.go
index faabb7ef9..8656d0f85 100644
--- a/vendor/golang.org/x/crypto/ssh/common.go
+++ b/vendor/golang.org/x/crypto/ssh/common.go
@@ -56,7 +56,7 @@ var supportedHostKeyAlgos = []string{
// This is based on RFC 4253, section 6.4, but with hmac-md5 variants removed
// because they have reached the end of their useful life.
var supportedMACs = []string{
- "hmac-sha2-256", "hmac-sha1", "hmac-sha1-96",
+ "hmac-sha2-256-etm@openssh.com", "hmac-sha2-256", "hmac-sha1", "hmac-sha1-96",
}
var supportedCompressions = []string{compressionNone}
diff --git a/vendor/golang.org/x/crypto/ssh/handshake.go b/vendor/golang.org/x/crypto/ssh/handshake.go
index 57f2d3daf..8de650644 100644
--- a/vendor/golang.org/x/crypto/ssh/handshake.go
+++ b/vendor/golang.org/x/crypto/ssh/handshake.go
@@ -66,8 +66,8 @@ type handshakeTransport struct {
// If the read loop wants to schedule a kex, it pings this
// channel, and the write loop will send out a kex
- // message. The boolean is whether this is the first request or not.
- requestKex chan bool
+ // message.
+ requestKex chan struct{}
// If the other side requests or confirms a kex, its kexInit
// packet is sent here for the write loop to find it.
@@ -102,14 +102,14 @@ func newHandshakeTransport(conn keyingTransport, config *Config, clientVersion,
serverVersion: serverVersion,
clientVersion: clientVersion,
incoming: make(chan []byte, chanSize),
- requestKex: make(chan bool, 1),
+ requestKex: make(chan struct{}, 1),
startKex: make(chan *pendingKex, 1),
config: config,
}
// We always start with a mandatory key exchange.
- t.requestKex <- true
+ t.requestKex <- struct{}{}
return t
}
@@ -166,6 +166,7 @@ func (t *handshakeTransport) printPacket(p []byte, write bool) {
if write {
action = "sent"
}
+
if p[0] == msgChannelData || p[0] == msgChannelExtendedData {
log.Printf("%s %s data (packet %d bytes)", t.id(), action, len(p))
} else {
@@ -230,14 +231,13 @@ func (t *handshakeTransport) recordWriteError(err error) {
func (t *handshakeTransport) requestKeyExchange() {
select {
- case t.requestKex <- false:
+ case t.requestKex <- struct{}{}:
default:
// something already requested a kex, so do nothing.
}
}
func (t *handshakeTransport) kexLoop() {
- firstSent := false
write:
for t.getWriteError() == nil {
@@ -251,18 +251,8 @@ write:
if !ok {
break write
}
- case requestFirst := <-t.requestKex:
- // For the first key exchange, both
- // sides will initiate a key exchange,
- // and both channels will fire. To
- // avoid doing two key exchanges in a
- // row, ignore our own request for an
- // initial kex if we have already sent
- // it out.
- if firstSent && requestFirst {
-
- continue
- }
+ case <-t.requestKex:
+ break
}
if !sent {
@@ -270,7 +260,6 @@ write:
t.recordWriteError(err)
break
}
- firstSent = true
sent = true
}
}
@@ -287,7 +276,8 @@ write:
// We're not servicing t.startKex, but the remote end
// has just sent us a kexInitMsg, so it can't send
- // another key change request.
+ // another key change request, until we close the done
+ // channel on the pendingKex request.
err := t.enterKeyExchange(request.otherInit)
@@ -301,6 +291,23 @@ write:
} else if t.algorithms != nil {
t.writeBytesLeft = t.algorithms.w.rekeyBytes()
}
+
+ // we have completed the key exchange. Since the
+ // reader is still blocked, it is safe to clear out
+ // the requestKex channel. This avoids the situation
+ // where: 1) we consumed our own request for the
+ // initial kex, and 2) the kex from the remote side
+ // caused another send on the requestKex channel,
+ clear:
+ for {
+ select {
+ case <-t.requestKex:
+ //
+ default:
+ break clear
+ }
+ }
+
request.done <- t.writeError
// kex finished. Push packets that we received while
@@ -314,7 +321,7 @@ write:
break
}
}
- t.pendingPackets = t.pendingPackets[0:]
+ t.pendingPackets = t.pendingPackets[:0]
t.mu.Unlock()
}
diff --git a/vendor/golang.org/x/crypto/ssh/handshake_test.go b/vendor/golang.org/x/crypto/ssh/handshake_test.go
index e61348fea..1b831127e 100644
--- a/vendor/golang.org/x/crypto/ssh/handshake_test.go
+++ b/vendor/golang.org/x/crypto/ssh/handshake_test.go
@@ -40,7 +40,7 @@ func (t *testChecker) Check(dialAddr string, addr net.Addr, key PublicKey) error
// therefore is buffered (net.Pipe deadlocks if both sides start with
// a write.)
func netPipe() (net.Conn, net.Conn, error) {
- listener, err := net.Listen("tcp", "127.0.0.1:0")
+ listener, err := net.Listen("tcp", ":0")
if err != nil {
return nil, nil, err
}
@@ -125,7 +125,12 @@ func TestHandshakeBasic(t *testing.T) {
t.Skip("see golang.org/issue/7237")
}
- checker := &syncChecker{make(chan int, 10)}
+ checker := &syncChecker{
+ waitCall: make(chan int, 10),
+ called: make(chan int, 10),
+ }
+
+ checker.waitCall <- 1
trC, trS, err := handshakePair(&ClientConfig{HostKeyCallback: checker.Check}, "addr", false)
if err != nil {
t.Fatalf("handshakePair: %v", err)
@@ -134,22 +139,25 @@ func TestHandshakeBasic(t *testing.T) {
defer trC.Close()
defer trS.Close()
+ // Let first kex complete normally.
<-checker.called
clientDone := make(chan int, 0)
gotHalf := make(chan int, 0)
+ const N = 20
go func() {
defer close(clientDone)
// Client writes a bunch of stuff, and does a key
// change in the middle. This should not confuse the
- // handshake in progress
- for i := 0; i < 10; i++ {
+ // handshake in progress. We do this twice, so we test
+ // that the packet buffer is reset correctly.
+ for i := 0; i < N; i++ {
p := []byte{msgRequestSuccess, byte(i)}
if err := trC.writePacket(p); err != nil {
t.Fatalf("sendPacket: %v", err)
}
- if i == 5 {
+ if (i % 10) == 5 {
<-gotHalf
// halfway through, we request a key change.
trC.requestKeyExchange()
@@ -159,32 +167,38 @@ func TestHandshakeBasic(t *testing.T) {
// write more.
<-checker.called
}
+ if (i % 10) == 7 {
+ // write some packets until the kex
+ // completes, to test buffering of
+ // packets.
+ checker.waitCall <- 1
+ }
}
}()
// Server checks that client messages come in cleanly
i := 0
err = nil
- for ; i < 10; i++ {
+ for ; i < N; i++ {
var p []byte
p, err = trS.readPacket()
if err != nil {
break
}
- if i == 5 {
+ if (i % 10) == 5 {
gotHalf <- 1
}
want := []byte{msgRequestSuccess, byte(i)}
if bytes.Compare(p, want) != 0 {
- t.Errorf("message %d: got %q, want %q", i, p, want)
+ t.Errorf("message %d: got %v, want %v", i, p, want)
}
}
<-clientDone
if err != nil && err != io.EOF {
t.Fatalf("server error: %v", err)
}
- if i != 10 {
+ if i != N {
t.Errorf("received %d messages, want 10.", i)
}
@@ -239,7 +253,10 @@ func TestForceFirstKex(t *testing.T) {
}
func TestHandshakeAutoRekeyWrite(t *testing.T) {
- checker := &syncChecker{make(chan int, 10)}
+ checker := &syncChecker{
+ called: make(chan int, 10),
+ waitCall: nil,
+ }
clientConf := &ClientConfig{HostKeyCallback: checker.Check}
clientConf.RekeyThreshold = 500
trC, trS, err := handshakePair(clientConf, "addr", false)
@@ -249,14 +266,19 @@ func TestHandshakeAutoRekeyWrite(t *testing.T) {
defer trC.Close()
defer trS.Close()
+ input := make([]byte, 251)
+ input[0] = msgRequestSuccess
+
done := make(chan int, 1)
const numPacket = 5
go func() {
defer close(done)
j := 0
for ; j < numPacket; j++ {
- if _, err := trS.readPacket(); err != nil {
+ if p, err := trS.readPacket(); err != nil {
break
+ } else if !bytes.Equal(input, p) {
+ t.Errorf("got packet type %d, want %d", p[0], input[0])
}
}
@@ -268,9 +290,9 @@ func TestHandshakeAutoRekeyWrite(t *testing.T) {
<-checker.called
for i := 0; i < numPacket; i++ {
- packet := make([]byte, 251)
- packet[0] = msgRequestSuccess
- if err := trC.writePacket(packet); err != nil {
+ p := make([]byte, len(input))
+ copy(p, input)
+ if err := trC.writePacket(p); err != nil {
t.Errorf("writePacket: %v", err)
}
if i == 2 {
@@ -283,16 +305,23 @@ func TestHandshakeAutoRekeyWrite(t *testing.T) {
}
type syncChecker struct {
- called chan int
+ waitCall chan int
+ called chan int
}
func (c *syncChecker) Check(dialAddr string, addr net.Addr, key PublicKey) error {
c.called <- 1
+ if c.waitCall != nil {
+ <-c.waitCall
+ }
return nil
}
func TestHandshakeAutoRekeyRead(t *testing.T) {
- sync := &syncChecker{make(chan int, 2)}
+ sync := &syncChecker{
+ called: make(chan int, 2),
+ waitCall: nil,
+ }
clientConf := &ClientConfig{
HostKeyCallback: sync.Check,
}
diff --git a/vendor/golang.org/x/crypto/ssh/mac.go b/vendor/golang.org/x/crypto/ssh/mac.go
index 07744ad67..c07a06285 100644
--- a/vendor/golang.org/x/crypto/ssh/mac.go
+++ b/vendor/golang.org/x/crypto/ssh/mac.go
@@ -15,6 +15,7 @@ import (
type macMode struct {
keySize int
+ etm bool
new func(key []byte) hash.Hash
}
@@ -45,13 +46,16 @@ func (t truncatingMAC) Size() int {
func (t truncatingMAC) BlockSize() int { return t.hmac.BlockSize() }
var macModes = map[string]*macMode{
- "hmac-sha2-256": {32, func(key []byte) hash.Hash {
+ "hmac-sha2-256-etm@openssh.com": {32, true, func(key []byte) hash.Hash {
return hmac.New(sha256.New, key)
}},
- "hmac-sha1": {20, func(key []byte) hash.Hash {
+ "hmac-sha2-256": {32, false, func(key []byte) hash.Hash {
+ return hmac.New(sha256.New, key)
+ }},
+ "hmac-sha1": {20, false, func(key []byte) hash.Hash {
return hmac.New(sha1.New, key)
}},
- "hmac-sha1-96": {20, func(key []byte) hash.Hash {
+ "hmac-sha1-96": {20, false, func(key []byte) hash.Hash {
return truncatingMAC{12, hmac.New(sha1.New, key)}
}},
}
diff --git a/vendor/golang.org/x/crypto/ssh/mux_test.go b/vendor/golang.org/x/crypto/ssh/mux_test.go
index 591aae8e8..25d2181d6 100644
--- a/vendor/golang.org/x/crypto/ssh/mux_test.go
+++ b/vendor/golang.org/x/crypto/ssh/mux_test.go
@@ -499,4 +499,7 @@ func TestDebug(t *testing.T) {
if debugHandshake {
t.Error("handshake debug switched on")
}
+ if debugTransport {
+ t.Error("transport debug switched on")
+ }
}
diff --git a/vendor/golang.org/x/crypto/ssh/server.go b/vendor/golang.org/x/crypto/ssh/server.go
index 28b109a9c..77c84d165 100644
--- a/vendor/golang.org/x/crypto/ssh/server.go
+++ b/vendor/golang.org/x/crypto/ssh/server.go
@@ -10,6 +10,7 @@ import (
"fmt"
"io"
"net"
+ "strings"
)
// The Permissions type holds fine-grained permissions that are
@@ -231,7 +232,7 @@ func isAcceptableAlgo(algo string) bool {
return false
}
-func checkSourceAddress(addr net.Addr, sourceAddr string) error {
+func checkSourceAddress(addr net.Addr, sourceAddrs string) error {
if addr == nil {
return errors.New("ssh: no address known for client, but source-address match required")
}
@@ -241,18 +242,20 @@ func checkSourceAddress(addr net.Addr, sourceAddr string) error {
return fmt.Errorf("ssh: remote address %v is not an TCP address when checking source-address match", addr)
}
- if allowedIP := net.ParseIP(sourceAddr); allowedIP != nil {
- if allowedIP.Equal(tcpAddr.IP) {
- return nil
- }
- } else {
- _, ipNet, err := net.ParseCIDR(sourceAddr)
- if err != nil {
- return fmt.Errorf("ssh: error parsing source-address restriction %q: %v", sourceAddr, err)
- }
+ for _, sourceAddr := range strings.Split(sourceAddrs, ",") {
+ if allowedIP := net.ParseIP(sourceAddr); allowedIP != nil {
+ if allowedIP.Equal(tcpAddr.IP) {
+ return nil
+ }
+ } else {
+ _, ipNet, err := net.ParseCIDR(sourceAddr)
+ if err != nil {
+ return fmt.Errorf("ssh: error parsing source-address restriction %q: %v", sourceAddr, err)
+ }
- if ipNet.Contains(tcpAddr.IP) {
- return nil
+ if ipNet.Contains(tcpAddr.IP) {
+ return nil
+ }
}
}
diff --git a/vendor/golang.org/x/crypto/ssh/transport.go b/vendor/golang.org/x/crypto/ssh/transport.go
index fd199324d..f9780e0ae 100644
--- a/vendor/golang.org/x/crypto/ssh/transport.go
+++ b/vendor/golang.org/x/crypto/ssh/transport.go
@@ -8,8 +8,13 @@ import (
"bufio"
"errors"
"io"
+ "log"
)
+// debugTransport if set, will print packet types as they go over the
+// wire. No message decoding is done, to minimize the impact on timing.
+const debugTransport = false
+
const (
gcmCipherID = "aes128-gcm@openssh.com"
aes128cbcID = "aes128-cbc"
@@ -40,7 +45,7 @@ type transport struct {
bufReader *bufio.Reader
bufWriter *bufio.Writer
rand io.Reader
-
+ isClient bool
io.Closer
}
@@ -86,6 +91,22 @@ func (t *transport) prepareKeyChange(algs *algorithms, kexResult *kexResult) err
return nil
}
+func (t *transport) printPacket(p []byte, write bool) {
+ if len(p) == 0 {
+ return
+ }
+ who := "server"
+ if t.isClient {
+ who = "client"
+ }
+ what := "read"
+ if write {
+ what = "write"
+ }
+
+ log.Println(what, who, p[0])
+}
+
// Read and decrypt next packet.
func (t *transport) readPacket() (p []byte, err error) {
for {
@@ -97,6 +118,9 @@ func (t *transport) readPacket() (p []byte, err error) {
break
}
}
+ if debugTransport {
+ t.printPacket(p, false)
+ }
return p, err
}
@@ -141,6 +165,9 @@ func (s *connectionState) readPacket(r *bufio.Reader) ([]byte, error) {
}
func (t *transport) writePacket(packet []byte) error {
+ if debugTransport {
+ t.printPacket(packet, true)
+ }
return t.writer.writePacket(t.bufWriter, t.rand, packet)
}
@@ -181,6 +208,8 @@ func newTransport(rwc io.ReadWriteCloser, rand io.Reader, isClient bool) *transp
},
Closer: rwc,
}
+ t.isClient = isClient
+
if isClient {
t.reader.dir = serverKeys
t.writer.dir = clientKeys
@@ -238,6 +267,7 @@ func newPacketCipher(d direction, algs directionAlgorithms, kex *kexResult) (pac
c := &streamPacketCipher{
mac: macModes[algs.MAC].new(macKey),
+ etm: macModes[algs.MAC].etm,
}
c.macResult = make([]byte, c.mac.Size())
diff --git a/vendor/golang.org/x/image/draw/draw.go b/vendor/golang.org/x/image/draw/draw.go
index b92e3c7f9..dfaa7fc55 100644
--- a/vendor/golang.org/x/image/draw/draw.go
+++ b/vendor/golang.org/x/image/draw/draw.go
@@ -11,12 +11,12 @@
// package in the standard library.
package draw
-// This file just contains the API exported by the image/draw package in the
-// standard library. Other files in this package provide additional features.
+// This file, and the go1_*.go files, just contains the API exported by the
+// image/draw package in the standard library. Other files in this package
+// provide additional features.
import (
"image"
- "image/color"
"image/draw"
)
@@ -32,13 +32,6 @@ func DrawMask(dst Image, r image.Rectangle, src image.Image, sp image.Point, mas
draw.DrawMask(dst, r, src, sp, mask, mp, draw.Op(op))
}
-// Drawer contains the Draw method.
-type Drawer interface {
- // Draw aligns r.Min in dst with sp in src and then replaces the
- // rectangle r in dst with the result of drawing src on dst.
- Draw(dst Image, r image.Rectangle, src image.Image, sp image.Point)
-}
-
// FloydSteinberg is a Drawer that is the Src Op with Floyd-Steinberg error
// diffusion.
var FloydSteinberg Drawer = floydSteinberg{}
@@ -48,32 +41,3 @@ type floydSteinberg struct{}
func (floydSteinberg) Draw(dst Image, r image.Rectangle, src image.Image, sp image.Point) {
draw.FloydSteinberg.Draw(dst, r, src, sp)
}
-
-// Image is an image.Image with a Set method to change a single pixel.
-type Image interface {
- image.Image
- Set(x, y int, c color.Color)
-}
-
-// Op is a Porter-Duff compositing operator.
-type Op int
-
-const (
- // Over specifies ``(src in mask) over dst''.
- Over Op = Op(draw.Over)
- // Src specifies ``src in mask''.
- Src Op = Op(draw.Src)
-)
-
-// Draw implements the Drawer interface by calling the Draw function with
-// this Op.
-func (op Op) Draw(dst Image, r image.Rectangle, src image.Image, sp image.Point) {
- (draw.Op(op)).Draw(dst, r, src, sp)
-}
-
-// Quantizer produces a palette for an image.
-type Quantizer interface {
- // Quantize appends up to cap(p) - len(p) colors to p and returns the
- // updated palette suitable for converting m to a paletted image.
- Quantize(p color.Palette, m image.Image) color.Palette
-}
diff --git a/vendor/golang.org/x/image/draw/gen.go b/vendor/golang.org/x/image/draw/gen.go
index 0fed47437..65a712350 100644
--- a/vendor/golang.org/x/image/draw/gen.go
+++ b/vendor/golang.org/x/image/draw/gen.go
@@ -804,7 +804,7 @@ func cOffset(x, y, sratio string) string {
func ycbcrToRGB(lhs, tmp string) string {
s := `
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- $yy1 := int(src.Y[$i]) * 0x10100
+ $yy1 := int(src.Y[$i]) * 0x10101
$cb1 := int(src.Cb[$j]) - 128
$cr1 := int(src.Cr[$j]) - 128
$r@ := ($yy1 + 91881*$cr1) >> 8
diff --git a/vendor/golang.org/x/image/draw/go1_8.go b/vendor/golang.org/x/image/draw/go1_8.go
new file mode 100644
index 000000000..ec192b717
--- /dev/null
+++ b/vendor/golang.org/x/image/draw/go1_8.go
@@ -0,0 +1,49 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build !go1.9,!go1.8.typealias
+
+package draw
+
+import (
+ "image"
+ "image/color"
+ "image/draw"
+)
+
+// Drawer contains the Draw method.
+type Drawer interface {
+ // Draw aligns r.Min in dst with sp in src and then replaces the
+ // rectangle r in dst with the result of drawing src on dst.
+ Draw(dst Image, r image.Rectangle, src image.Image, sp image.Point)
+}
+
+// Image is an image.Image with a Set method to change a single pixel.
+type Image interface {
+ image.Image
+ Set(x, y int, c color.Color)
+}
+
+// Op is a Porter-Duff compositing operator.
+type Op int
+
+const (
+ // Over specifies ``(src in mask) over dst''.
+ Over Op = Op(draw.Over)
+ // Src specifies ``src in mask''.
+ Src Op = Op(draw.Src)
+)
+
+// Draw implements the Drawer interface by calling the Draw function with
+// this Op.
+func (op Op) Draw(dst Image, r image.Rectangle, src image.Image, sp image.Point) {
+ (draw.Op(op)).Draw(dst, r, src, sp)
+}
+
+// Quantizer produces a palette for an image.
+type Quantizer interface {
+ // Quantize appends up to cap(p) - len(p) colors to p and returns the
+ // updated palette suitable for converting m to a paletted image.
+ Quantize(p color.Palette, m image.Image) color.Palette
+}
diff --git a/vendor/golang.org/x/image/draw/go1_9.go b/vendor/golang.org/x/image/draw/go1_9.go
new file mode 100644
index 000000000..fc548e947
--- /dev/null
+++ b/vendor/golang.org/x/image/draw/go1_9.go
@@ -0,0 +1,57 @@
+// 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.
+
+// +build go1.9 go1.8.typealias
+
+package draw
+
+import (
+ "image/draw"
+)
+
+// We use type aliases (new in Go 1.9) for the exported names from the standard
+// library's image/draw package. This is not merely syntactic sugar for
+//
+// type Drawer draw.Drawer
+//
+// as aliasing means that the types in this package, such as draw.Image and
+// draw.Op, are identical to the corresponding draw.Image and draw.Op types in
+// the standard library. In comparison, prior to Go 1.9, the code in go1_8.go
+// defines new types that mimic the old but are different types.
+//
+// The package documentation, in draw.go, explicitly gives the intent of this
+// package:
+//
+// This package is a superset of and a drop-in replacement for the
+// image/draw package in the standard library.
+//
+// Drop-in replacement means that I can replace all of my "image/draw" imports
+// with "golang.org/x/image/draw", to access additional features in this
+// package, and no further changes are required. That's mostly true, but not
+// completely true unless we use type aliases.
+//
+// Without type aliases, users might need to import both "image/draw" and
+// "golang.org/x/image/draw" in order to convert from two conceptually
+// equivalent but different (from the compiler's point of view) types, such as
+// from one draw.Op type to another draw.Op type, to satisfy some other
+// interface or function signature.
+
+// Drawer contains the Draw method.
+type Drawer = draw.Drawer
+
+// Image is an image.Image with a Set method to change a single pixel.
+type Image = draw.Image
+
+// Op is a Porter-Duff compositing operator.
+type Op = draw.Op
+
+const (
+ // Over specifies ``(src in mask) over dst''.
+ Over Op = draw.Over
+ // Src specifies ``src in mask''.
+ Src Op = draw.Src
+)
+
+// Quantizer produces a palette for an image.
+type Quantizer = draw.Quantizer
diff --git a/vendor/golang.org/x/image/draw/impl.go b/vendor/golang.org/x/image/draw/impl.go
index d6484d734..637887be6 100644
--- a/vendor/golang.org/x/image/draw/impl.go
+++ b/vendor/golang.org/x/image/draw/impl.go
@@ -343,7 +343,7 @@ func (nnInterpolator) scale_RGBA_YCbCr444_Src(dst *image.RGBA, dr, adr image.Rec
pj := (sr.Min.Y+int(sy)-src.Rect.Min.Y)*src.CStride + (sr.Min.X + int(sx) - src.Rect.Min.X)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- pyy1 := int(src.Y[pi]) * 0x10100
+ pyy1 := int(src.Y[pi]) * 0x10101
pcb1 := int(src.Cb[pj]) - 128
pcr1 := int(src.Cr[pj]) - 128
pr := (pyy1 + 91881*pcr1) >> 8
@@ -386,7 +386,7 @@ func (nnInterpolator) scale_RGBA_YCbCr422_Src(dst *image.RGBA, dr, adr image.Rec
pj := (sr.Min.Y+int(sy)-src.Rect.Min.Y)*src.CStride + ((sr.Min.X+int(sx))/2 - src.Rect.Min.X/2)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- pyy1 := int(src.Y[pi]) * 0x10100
+ pyy1 := int(src.Y[pi]) * 0x10101
pcb1 := int(src.Cb[pj]) - 128
pcr1 := int(src.Cr[pj]) - 128
pr := (pyy1 + 91881*pcr1) >> 8
@@ -429,7 +429,7 @@ func (nnInterpolator) scale_RGBA_YCbCr420_Src(dst *image.RGBA, dr, adr image.Rec
pj := ((sr.Min.Y+int(sy))/2-src.Rect.Min.Y/2)*src.CStride + ((sr.Min.X+int(sx))/2 - src.Rect.Min.X/2)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- pyy1 := int(src.Y[pi]) * 0x10100
+ pyy1 := int(src.Y[pi]) * 0x10101
pcb1 := int(src.Cb[pj]) - 128
pcr1 := int(src.Cr[pj]) - 128
pr := (pyy1 + 91881*pcr1) >> 8
@@ -472,7 +472,7 @@ func (nnInterpolator) scale_RGBA_YCbCr440_Src(dst *image.RGBA, dr, adr image.Rec
pj := ((sr.Min.Y+int(sy))/2-src.Rect.Min.Y/2)*src.CStride + (sr.Min.X + int(sx) - src.Rect.Min.X)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- pyy1 := int(src.Y[pi]) * 0x10100
+ pyy1 := int(src.Y[pi]) * 0x10101
pcb1 := int(src.Cb[pj]) - 128
pcr1 := int(src.Cr[pj]) - 128
pr := (pyy1 + 91881*pcr1) >> 8
@@ -759,7 +759,7 @@ func (nnInterpolator) transform_RGBA_YCbCr444_Src(dst *image.RGBA, dr, adr image
pj := (sy0-src.Rect.Min.Y)*src.CStride + (sx0 - src.Rect.Min.X)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- pyy1 := int(src.Y[pi]) * 0x10100
+ pyy1 := int(src.Y[pi]) * 0x10101
pcb1 := int(src.Cb[pj]) - 128
pcr1 := int(src.Cr[pj]) - 128
pr := (pyy1 + 91881*pcr1) >> 8
@@ -803,7 +803,7 @@ func (nnInterpolator) transform_RGBA_YCbCr422_Src(dst *image.RGBA, dr, adr image
pj := (sy0-src.Rect.Min.Y)*src.CStride + ((sx0)/2 - src.Rect.Min.X/2)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- pyy1 := int(src.Y[pi]) * 0x10100
+ pyy1 := int(src.Y[pi]) * 0x10101
pcb1 := int(src.Cb[pj]) - 128
pcr1 := int(src.Cr[pj]) - 128
pr := (pyy1 + 91881*pcr1) >> 8
@@ -847,7 +847,7 @@ func (nnInterpolator) transform_RGBA_YCbCr420_Src(dst *image.RGBA, dr, adr image
pj := ((sy0)/2-src.Rect.Min.Y/2)*src.CStride + ((sx0)/2 - src.Rect.Min.X/2)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- pyy1 := int(src.Y[pi]) * 0x10100
+ pyy1 := int(src.Y[pi]) * 0x10101
pcb1 := int(src.Cb[pj]) - 128
pcr1 := int(src.Cr[pj]) - 128
pr := (pyy1 + 91881*pcr1) >> 8
@@ -891,7 +891,7 @@ func (nnInterpolator) transform_RGBA_YCbCr440_Src(dst *image.RGBA, dr, adr image
pj := ((sy0)/2-src.Rect.Min.Y/2)*src.CStride + (sx0 - src.Rect.Min.X)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- pyy1 := int(src.Y[pi]) * 0x10100
+ pyy1 := int(src.Y[pi]) * 0x10101
pcb1 := int(src.Cb[pj]) - 128
pcr1 := int(src.Cr[pj]) - 128
pr := (pyy1 + 91881*pcr1) >> 8
@@ -1756,7 +1756,7 @@ func (ablInterpolator) scale_RGBA_YCbCr444_Src(dst *image.RGBA, dr, adr image.Re
s00j := (sr.Min.Y+int(sy0)-src.Rect.Min.Y)*src.CStride + (sr.Min.X + int(sx0) - src.Rect.Min.X)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- s00yy1 := int(src.Y[s00i]) * 0x10100
+ s00yy1 := int(src.Y[s00i]) * 0x10101
s00cb1 := int(src.Cb[s00j]) - 128
s00cr1 := int(src.Cr[s00j]) - 128
s00ru := (s00yy1 + 91881*s00cr1) >> 8
@@ -1785,7 +1785,7 @@ func (ablInterpolator) scale_RGBA_YCbCr444_Src(dst *image.RGBA, dr, adr image.Re
s10j := (sr.Min.Y+int(sy0)-src.Rect.Min.Y)*src.CStride + (sr.Min.X + int(sx1) - src.Rect.Min.X)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- s10yy1 := int(src.Y[s10i]) * 0x10100
+ s10yy1 := int(src.Y[s10i]) * 0x10101
s10cb1 := int(src.Cb[s10j]) - 128
s10cr1 := int(src.Cr[s10j]) - 128
s10ru := (s10yy1 + 91881*s10cr1) >> 8
@@ -1817,7 +1817,7 @@ func (ablInterpolator) scale_RGBA_YCbCr444_Src(dst *image.RGBA, dr, adr image.Re
s01j := (sr.Min.Y+int(sy1)-src.Rect.Min.Y)*src.CStride + (sr.Min.X + int(sx0) - src.Rect.Min.X)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- s01yy1 := int(src.Y[s01i]) * 0x10100
+ s01yy1 := int(src.Y[s01i]) * 0x10101
s01cb1 := int(src.Cb[s01j]) - 128
s01cr1 := int(src.Cr[s01j]) - 128
s01ru := (s01yy1 + 91881*s01cr1) >> 8
@@ -1846,7 +1846,7 @@ func (ablInterpolator) scale_RGBA_YCbCr444_Src(dst *image.RGBA, dr, adr image.Re
s11j := (sr.Min.Y+int(sy1)-src.Rect.Min.Y)*src.CStride + (sr.Min.X + int(sx1) - src.Rect.Min.X)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- s11yy1 := int(src.Y[s11i]) * 0x10100
+ s11yy1 := int(src.Y[s11i]) * 0x10101
s11cb1 := int(src.Cb[s11j]) - 128
s11cr1 := int(src.Cr[s11j]) - 128
s11ru := (s11yy1 + 91881*s11cr1) >> 8
@@ -1931,7 +1931,7 @@ func (ablInterpolator) scale_RGBA_YCbCr422_Src(dst *image.RGBA, dr, adr image.Re
s00j := (sr.Min.Y+int(sy0)-src.Rect.Min.Y)*src.CStride + ((sr.Min.X+int(sx0))/2 - src.Rect.Min.X/2)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- s00yy1 := int(src.Y[s00i]) * 0x10100
+ s00yy1 := int(src.Y[s00i]) * 0x10101
s00cb1 := int(src.Cb[s00j]) - 128
s00cr1 := int(src.Cr[s00j]) - 128
s00ru := (s00yy1 + 91881*s00cr1) >> 8
@@ -1960,7 +1960,7 @@ func (ablInterpolator) scale_RGBA_YCbCr422_Src(dst *image.RGBA, dr, adr image.Re
s10j := (sr.Min.Y+int(sy0)-src.Rect.Min.Y)*src.CStride + ((sr.Min.X+int(sx1))/2 - src.Rect.Min.X/2)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- s10yy1 := int(src.Y[s10i]) * 0x10100
+ s10yy1 := int(src.Y[s10i]) * 0x10101
s10cb1 := int(src.Cb[s10j]) - 128
s10cr1 := int(src.Cr[s10j]) - 128
s10ru := (s10yy1 + 91881*s10cr1) >> 8
@@ -1992,7 +1992,7 @@ func (ablInterpolator) scale_RGBA_YCbCr422_Src(dst *image.RGBA, dr, adr image.Re
s01j := (sr.Min.Y+int(sy1)-src.Rect.Min.Y)*src.CStride + ((sr.Min.X+int(sx0))/2 - src.Rect.Min.X/2)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- s01yy1 := int(src.Y[s01i]) * 0x10100
+ s01yy1 := int(src.Y[s01i]) * 0x10101
s01cb1 := int(src.Cb[s01j]) - 128
s01cr1 := int(src.Cr[s01j]) - 128
s01ru := (s01yy1 + 91881*s01cr1) >> 8
@@ -2021,7 +2021,7 @@ func (ablInterpolator) scale_RGBA_YCbCr422_Src(dst *image.RGBA, dr, adr image.Re
s11j := (sr.Min.Y+int(sy1)-src.Rect.Min.Y)*src.CStride + ((sr.Min.X+int(sx1))/2 - src.Rect.Min.X/2)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- s11yy1 := int(src.Y[s11i]) * 0x10100
+ s11yy1 := int(src.Y[s11i]) * 0x10101
s11cb1 := int(src.Cb[s11j]) - 128
s11cr1 := int(src.Cr[s11j]) - 128
s11ru := (s11yy1 + 91881*s11cr1) >> 8
@@ -2106,7 +2106,7 @@ func (ablInterpolator) scale_RGBA_YCbCr420_Src(dst *image.RGBA, dr, adr image.Re
s00j := ((sr.Min.Y+int(sy0))/2-src.Rect.Min.Y/2)*src.CStride + ((sr.Min.X+int(sx0))/2 - src.Rect.Min.X/2)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- s00yy1 := int(src.Y[s00i]) * 0x10100
+ s00yy1 := int(src.Y[s00i]) * 0x10101
s00cb1 := int(src.Cb[s00j]) - 128
s00cr1 := int(src.Cr[s00j]) - 128
s00ru := (s00yy1 + 91881*s00cr1) >> 8
@@ -2135,7 +2135,7 @@ func (ablInterpolator) scale_RGBA_YCbCr420_Src(dst *image.RGBA, dr, adr image.Re
s10j := ((sr.Min.Y+int(sy0))/2-src.Rect.Min.Y/2)*src.CStride + ((sr.Min.X+int(sx1))/2 - src.Rect.Min.X/2)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- s10yy1 := int(src.Y[s10i]) * 0x10100
+ s10yy1 := int(src.Y[s10i]) * 0x10101
s10cb1 := int(src.Cb[s10j]) - 128
s10cr1 := int(src.Cr[s10j]) - 128
s10ru := (s10yy1 + 91881*s10cr1) >> 8
@@ -2167,7 +2167,7 @@ func (ablInterpolator) scale_RGBA_YCbCr420_Src(dst *image.RGBA, dr, adr image.Re
s01j := ((sr.Min.Y+int(sy1))/2-src.Rect.Min.Y/2)*src.CStride + ((sr.Min.X+int(sx0))/2 - src.Rect.Min.X/2)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- s01yy1 := int(src.Y[s01i]) * 0x10100
+ s01yy1 := int(src.Y[s01i]) * 0x10101
s01cb1 := int(src.Cb[s01j]) - 128
s01cr1 := int(src.Cr[s01j]) - 128
s01ru := (s01yy1 + 91881*s01cr1) >> 8
@@ -2196,7 +2196,7 @@ func (ablInterpolator) scale_RGBA_YCbCr420_Src(dst *image.RGBA, dr, adr image.Re
s11j := ((sr.Min.Y+int(sy1))/2-src.Rect.Min.Y/2)*src.CStride + ((sr.Min.X+int(sx1))/2 - src.Rect.Min.X/2)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- s11yy1 := int(src.Y[s11i]) * 0x10100
+ s11yy1 := int(src.Y[s11i]) * 0x10101
s11cb1 := int(src.Cb[s11j]) - 128
s11cr1 := int(src.Cr[s11j]) - 128
s11ru := (s11yy1 + 91881*s11cr1) >> 8
@@ -2281,7 +2281,7 @@ func (ablInterpolator) scale_RGBA_YCbCr440_Src(dst *image.RGBA, dr, adr image.Re
s00j := ((sr.Min.Y+int(sy0))/2-src.Rect.Min.Y/2)*src.CStride + (sr.Min.X + int(sx0) - src.Rect.Min.X)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- s00yy1 := int(src.Y[s00i]) * 0x10100
+ s00yy1 := int(src.Y[s00i]) * 0x10101
s00cb1 := int(src.Cb[s00j]) - 128
s00cr1 := int(src.Cr[s00j]) - 128
s00ru := (s00yy1 + 91881*s00cr1) >> 8
@@ -2310,7 +2310,7 @@ func (ablInterpolator) scale_RGBA_YCbCr440_Src(dst *image.RGBA, dr, adr image.Re
s10j := ((sr.Min.Y+int(sy0))/2-src.Rect.Min.Y/2)*src.CStride + (sr.Min.X + int(sx1) - src.Rect.Min.X)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- s10yy1 := int(src.Y[s10i]) * 0x10100
+ s10yy1 := int(src.Y[s10i]) * 0x10101
s10cb1 := int(src.Cb[s10j]) - 128
s10cr1 := int(src.Cr[s10j]) - 128
s10ru := (s10yy1 + 91881*s10cr1) >> 8
@@ -2342,7 +2342,7 @@ func (ablInterpolator) scale_RGBA_YCbCr440_Src(dst *image.RGBA, dr, adr image.Re
s01j := ((sr.Min.Y+int(sy1))/2-src.Rect.Min.Y/2)*src.CStride + (sr.Min.X + int(sx0) - src.Rect.Min.X)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- s01yy1 := int(src.Y[s01i]) * 0x10100
+ s01yy1 := int(src.Y[s01i]) * 0x10101
s01cb1 := int(src.Cb[s01j]) - 128
s01cr1 := int(src.Cr[s01j]) - 128
s01ru := (s01yy1 + 91881*s01cr1) >> 8
@@ -2371,7 +2371,7 @@ func (ablInterpolator) scale_RGBA_YCbCr440_Src(dst *image.RGBA, dr, adr image.Re
s11j := ((sr.Min.Y+int(sy1))/2-src.Rect.Min.Y/2)*src.CStride + (sr.Min.X + int(sx1) - src.Rect.Min.X)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- s11yy1 := int(src.Y[s11i]) * 0x10100
+ s11yy1 := int(src.Y[s11i]) * 0x10101
s11cb1 := int(src.Cb[s11j]) - 128
s11cr1 := int(src.Cr[s11j]) - 128
s11ru := (s11yy1 + 91881*s11cr1) >> 8
@@ -3345,7 +3345,7 @@ func (ablInterpolator) transform_RGBA_YCbCr444_Src(dst *image.RGBA, dr, adr imag
s00j := (sy0-src.Rect.Min.Y)*src.CStride + (sx0 - src.Rect.Min.X)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- s00yy1 := int(src.Y[s00i]) * 0x10100
+ s00yy1 := int(src.Y[s00i]) * 0x10101
s00cb1 := int(src.Cb[s00j]) - 128
s00cr1 := int(src.Cr[s00j]) - 128
s00ru := (s00yy1 + 91881*s00cr1) >> 8
@@ -3374,7 +3374,7 @@ func (ablInterpolator) transform_RGBA_YCbCr444_Src(dst *image.RGBA, dr, adr imag
s10j := (sy0-src.Rect.Min.Y)*src.CStride + (sx1 - src.Rect.Min.X)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- s10yy1 := int(src.Y[s10i]) * 0x10100
+ s10yy1 := int(src.Y[s10i]) * 0x10101
s10cb1 := int(src.Cb[s10j]) - 128
s10cr1 := int(src.Cr[s10j]) - 128
s10ru := (s10yy1 + 91881*s10cr1) >> 8
@@ -3406,7 +3406,7 @@ func (ablInterpolator) transform_RGBA_YCbCr444_Src(dst *image.RGBA, dr, adr imag
s01j := (sy1-src.Rect.Min.Y)*src.CStride + (sx0 - src.Rect.Min.X)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- s01yy1 := int(src.Y[s01i]) * 0x10100
+ s01yy1 := int(src.Y[s01i]) * 0x10101
s01cb1 := int(src.Cb[s01j]) - 128
s01cr1 := int(src.Cr[s01j]) - 128
s01ru := (s01yy1 + 91881*s01cr1) >> 8
@@ -3435,7 +3435,7 @@ func (ablInterpolator) transform_RGBA_YCbCr444_Src(dst *image.RGBA, dr, adr imag
s11j := (sy1-src.Rect.Min.Y)*src.CStride + (sx1 - src.Rect.Min.X)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- s11yy1 := int(src.Y[s11i]) * 0x10100
+ s11yy1 := int(src.Y[s11i]) * 0x10101
s11cb1 := int(src.Cb[s11j]) - 128
s11cr1 := int(src.Cr[s11j]) - 128
s11ru := (s11yy1 + 91881*s11cr1) >> 8
@@ -3521,7 +3521,7 @@ func (ablInterpolator) transform_RGBA_YCbCr422_Src(dst *image.RGBA, dr, adr imag
s00j := (sy0-src.Rect.Min.Y)*src.CStride + ((sx0)/2 - src.Rect.Min.X/2)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- s00yy1 := int(src.Y[s00i]) * 0x10100
+ s00yy1 := int(src.Y[s00i]) * 0x10101
s00cb1 := int(src.Cb[s00j]) - 128
s00cr1 := int(src.Cr[s00j]) - 128
s00ru := (s00yy1 + 91881*s00cr1) >> 8
@@ -3550,7 +3550,7 @@ func (ablInterpolator) transform_RGBA_YCbCr422_Src(dst *image.RGBA, dr, adr imag
s10j := (sy0-src.Rect.Min.Y)*src.CStride + ((sx1)/2 - src.Rect.Min.X/2)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- s10yy1 := int(src.Y[s10i]) * 0x10100
+ s10yy1 := int(src.Y[s10i]) * 0x10101
s10cb1 := int(src.Cb[s10j]) - 128
s10cr1 := int(src.Cr[s10j]) - 128
s10ru := (s10yy1 + 91881*s10cr1) >> 8
@@ -3582,7 +3582,7 @@ func (ablInterpolator) transform_RGBA_YCbCr422_Src(dst *image.RGBA, dr, adr imag
s01j := (sy1-src.Rect.Min.Y)*src.CStride + ((sx0)/2 - src.Rect.Min.X/2)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- s01yy1 := int(src.Y[s01i]) * 0x10100
+ s01yy1 := int(src.Y[s01i]) * 0x10101
s01cb1 := int(src.Cb[s01j]) - 128
s01cr1 := int(src.Cr[s01j]) - 128
s01ru := (s01yy1 + 91881*s01cr1) >> 8
@@ -3611,7 +3611,7 @@ func (ablInterpolator) transform_RGBA_YCbCr422_Src(dst *image.RGBA, dr, adr imag
s11j := (sy1-src.Rect.Min.Y)*src.CStride + ((sx1)/2 - src.Rect.Min.X/2)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- s11yy1 := int(src.Y[s11i]) * 0x10100
+ s11yy1 := int(src.Y[s11i]) * 0x10101
s11cb1 := int(src.Cb[s11j]) - 128
s11cr1 := int(src.Cr[s11j]) - 128
s11ru := (s11yy1 + 91881*s11cr1) >> 8
@@ -3697,7 +3697,7 @@ func (ablInterpolator) transform_RGBA_YCbCr420_Src(dst *image.RGBA, dr, adr imag
s00j := ((sy0)/2-src.Rect.Min.Y/2)*src.CStride + ((sx0)/2 - src.Rect.Min.X/2)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- s00yy1 := int(src.Y[s00i]) * 0x10100
+ s00yy1 := int(src.Y[s00i]) * 0x10101
s00cb1 := int(src.Cb[s00j]) - 128
s00cr1 := int(src.Cr[s00j]) - 128
s00ru := (s00yy1 + 91881*s00cr1) >> 8
@@ -3726,7 +3726,7 @@ func (ablInterpolator) transform_RGBA_YCbCr420_Src(dst *image.RGBA, dr, adr imag
s10j := ((sy0)/2-src.Rect.Min.Y/2)*src.CStride + ((sx1)/2 - src.Rect.Min.X/2)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- s10yy1 := int(src.Y[s10i]) * 0x10100
+ s10yy1 := int(src.Y[s10i]) * 0x10101
s10cb1 := int(src.Cb[s10j]) - 128
s10cr1 := int(src.Cr[s10j]) - 128
s10ru := (s10yy1 + 91881*s10cr1) >> 8
@@ -3758,7 +3758,7 @@ func (ablInterpolator) transform_RGBA_YCbCr420_Src(dst *image.RGBA, dr, adr imag
s01j := ((sy1)/2-src.Rect.Min.Y/2)*src.CStride + ((sx0)/2 - src.Rect.Min.X/2)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- s01yy1 := int(src.Y[s01i]) * 0x10100
+ s01yy1 := int(src.Y[s01i]) * 0x10101
s01cb1 := int(src.Cb[s01j]) - 128
s01cr1 := int(src.Cr[s01j]) - 128
s01ru := (s01yy1 + 91881*s01cr1) >> 8
@@ -3787,7 +3787,7 @@ func (ablInterpolator) transform_RGBA_YCbCr420_Src(dst *image.RGBA, dr, adr imag
s11j := ((sy1)/2-src.Rect.Min.Y/2)*src.CStride + ((sx1)/2 - src.Rect.Min.X/2)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- s11yy1 := int(src.Y[s11i]) * 0x10100
+ s11yy1 := int(src.Y[s11i]) * 0x10101
s11cb1 := int(src.Cb[s11j]) - 128
s11cr1 := int(src.Cr[s11j]) - 128
s11ru := (s11yy1 + 91881*s11cr1) >> 8
@@ -3873,7 +3873,7 @@ func (ablInterpolator) transform_RGBA_YCbCr440_Src(dst *image.RGBA, dr, adr imag
s00j := ((sy0)/2-src.Rect.Min.Y/2)*src.CStride + (sx0 - src.Rect.Min.X)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- s00yy1 := int(src.Y[s00i]) * 0x10100
+ s00yy1 := int(src.Y[s00i]) * 0x10101
s00cb1 := int(src.Cb[s00j]) - 128
s00cr1 := int(src.Cr[s00j]) - 128
s00ru := (s00yy1 + 91881*s00cr1) >> 8
@@ -3902,7 +3902,7 @@ func (ablInterpolator) transform_RGBA_YCbCr440_Src(dst *image.RGBA, dr, adr imag
s10j := ((sy0)/2-src.Rect.Min.Y/2)*src.CStride + (sx1 - src.Rect.Min.X)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- s10yy1 := int(src.Y[s10i]) * 0x10100
+ s10yy1 := int(src.Y[s10i]) * 0x10101
s10cb1 := int(src.Cb[s10j]) - 128
s10cr1 := int(src.Cr[s10j]) - 128
s10ru := (s10yy1 + 91881*s10cr1) >> 8
@@ -3934,7 +3934,7 @@ func (ablInterpolator) transform_RGBA_YCbCr440_Src(dst *image.RGBA, dr, adr imag
s01j := ((sy1)/2-src.Rect.Min.Y/2)*src.CStride + (sx0 - src.Rect.Min.X)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- s01yy1 := int(src.Y[s01i]) * 0x10100
+ s01yy1 := int(src.Y[s01i]) * 0x10101
s01cb1 := int(src.Cb[s01j]) - 128
s01cr1 := int(src.Cr[s01j]) - 128
s01ru := (s01yy1 + 91881*s01cr1) >> 8
@@ -3963,7 +3963,7 @@ func (ablInterpolator) transform_RGBA_YCbCr440_Src(dst *image.RGBA, dr, adr imag
s11j := ((sy1)/2-src.Rect.Min.Y/2)*src.CStride + (sx1 - src.Rect.Min.X)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- s11yy1 := int(src.Y[s11i]) * 0x10100
+ s11yy1 := int(src.Y[s11i]) * 0x10101
s11cb1 := int(src.Cb[s11j]) - 128
s11cr1 := int(src.Cr[s11j]) - 128
s11ru := (s11yy1 + 91881*s11cr1) >> 8
@@ -4729,7 +4729,7 @@ func (z *kernelScaler) scaleX_YCbCr444(tmp [][4]float64, src *image.YCbCr, sr im
pj := (sr.Min.Y+int(y)-src.Rect.Min.Y)*src.CStride + (sr.Min.X + int(c.coord) - src.Rect.Min.X)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- pyy1 := int(src.Y[pi]) * 0x10100
+ pyy1 := int(src.Y[pi]) * 0x10101
pcb1 := int(src.Cb[pj]) - 128
pcr1 := int(src.Cr[pj]) - 128
pru := (pyy1 + 91881*pcr1) >> 8
@@ -4776,7 +4776,7 @@ func (z *kernelScaler) scaleX_YCbCr422(tmp [][4]float64, src *image.YCbCr, sr im
pj := (sr.Min.Y+int(y)-src.Rect.Min.Y)*src.CStride + ((sr.Min.X+int(c.coord))/2 - src.Rect.Min.X/2)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- pyy1 := int(src.Y[pi]) * 0x10100
+ pyy1 := int(src.Y[pi]) * 0x10101
pcb1 := int(src.Cb[pj]) - 128
pcr1 := int(src.Cr[pj]) - 128
pru := (pyy1 + 91881*pcr1) >> 8
@@ -4823,7 +4823,7 @@ func (z *kernelScaler) scaleX_YCbCr420(tmp [][4]float64, src *image.YCbCr, sr im
pj := ((sr.Min.Y+int(y))/2-src.Rect.Min.Y/2)*src.CStride + ((sr.Min.X+int(c.coord))/2 - src.Rect.Min.X/2)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- pyy1 := int(src.Y[pi]) * 0x10100
+ pyy1 := int(src.Y[pi]) * 0x10101
pcb1 := int(src.Cb[pj]) - 128
pcr1 := int(src.Cr[pj]) - 128
pru := (pyy1 + 91881*pcr1) >> 8
@@ -4870,7 +4870,7 @@ func (z *kernelScaler) scaleX_YCbCr440(tmp [][4]float64, src *image.YCbCr, sr im
pj := ((sr.Min.Y+int(y))/2-src.Rect.Min.Y/2)*src.CStride + (sr.Min.X + int(c.coord) - src.Rect.Min.X)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- pyy1 := int(src.Y[pi]) * 0x10100
+ pyy1 := int(src.Y[pi]) * 0x10101
pcb1 := int(src.Cb[pj]) - 128
pcr1 := int(src.Cr[pj]) - 128
pru := (pyy1 + 91881*pcr1) >> 8
@@ -5759,7 +5759,7 @@ func (q *Kernel) transform_RGBA_YCbCr444_Src(dst *image.RGBA, dr, adr image.Rect
pj := (ky-src.Rect.Min.Y)*src.CStride + (kx - src.Rect.Min.X)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- pyy1 := int(src.Y[pi]) * 0x10100
+ pyy1 := int(src.Y[pi]) * 0x10101
pcb1 := int(src.Cb[pj]) - 128
pcr1 := int(src.Cr[pj]) - 128
pru := (pyy1 + 91881*pcr1) >> 8
@@ -5883,7 +5883,7 @@ func (q *Kernel) transform_RGBA_YCbCr422_Src(dst *image.RGBA, dr, adr image.Rect
pj := (ky-src.Rect.Min.Y)*src.CStride + ((kx)/2 - src.Rect.Min.X/2)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- pyy1 := int(src.Y[pi]) * 0x10100
+ pyy1 := int(src.Y[pi]) * 0x10101
pcb1 := int(src.Cb[pj]) - 128
pcr1 := int(src.Cr[pj]) - 128
pru := (pyy1 + 91881*pcr1) >> 8
@@ -6007,7 +6007,7 @@ func (q *Kernel) transform_RGBA_YCbCr420_Src(dst *image.RGBA, dr, adr image.Rect
pj := ((ky)/2-src.Rect.Min.Y/2)*src.CStride + ((kx)/2 - src.Rect.Min.X/2)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- pyy1 := int(src.Y[pi]) * 0x10100
+ pyy1 := int(src.Y[pi]) * 0x10101
pcb1 := int(src.Cb[pj]) - 128
pcr1 := int(src.Cr[pj]) - 128
pru := (pyy1 + 91881*pcr1) >> 8
@@ -6131,7 +6131,7 @@ func (q *Kernel) transform_RGBA_YCbCr440_Src(dst *image.RGBA, dr, adr image.Rect
pj := ((ky)/2-src.Rect.Min.Y/2)*src.CStride + (kx - src.Rect.Min.X)
// This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method.
- pyy1 := int(src.Y[pi]) * 0x10100
+ pyy1 := int(src.Y[pi]) * 0x10101
pcb1 := int(src.Cb[pj]) - 128
pcr1 := int(src.Cr[pj]) - 128
pru := (pyy1 + 91881*pcr1) >> 8
diff --git a/vendor/golang.org/x/image/draw/stdlib_test.go b/vendor/golang.org/x/image/draw/stdlib_test.go
index c45f78c2e..9015bfd6f 100644
--- a/vendor/golang.org/x/image/draw/stdlib_test.go
+++ b/vendor/golang.org/x/image/draw/stdlib_test.go
@@ -2,14 +2,14 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build go1.5
+// +build go1.9
package draw
// This file contains tests that depend on the exact behavior of the
// image/color package in the standard library. The color conversion formula
-// from YCbCr to RGBA changed between Go 1.4 and Go 1.5, so this file's tests
-// are only enabled for Go 1.5 and above.
+// from YCbCr to RGBA changed between Go 1.4 and Go 1.5, and between Go 1.8 and
+// Go 1.9, so this file's tests are only enabled for Go 1.9 and above.
import (
"bytes"
diff --git a/vendor/golang.org/x/image/font/sfnt/cmap.go b/vendor/golang.org/x/image/font/sfnt/cmap.go
new file mode 100644
index 000000000..42338f1bc
--- /dev/null
+++ b/vendor/golang.org/x/image/font/sfnt/cmap.go
@@ -0,0 +1,269 @@
+// 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 sfnt
+
+import (
+ "unicode/utf8"
+
+ "golang.org/x/text/encoding/charmap"
+)
+
+// Platform IDs and Platform Specific IDs as per
+// https://www.microsoft.com/typography/otspec/name.htm
+const (
+ pidUnicode = 0
+ pidMacintosh = 1
+ pidWindows = 3
+
+ psidUnicode2BMPOnly = 3
+ psidUnicode2FullRepertoire = 4
+ // Note that FontForge may generate a bogus Platform Specific ID (value 10)
+ // for the Unicode Platform ID (value 0). See
+ // https://github.com/fontforge/fontforge/issues/2728
+
+ psidMacintoshRoman = 0
+
+ psidWindowsSymbol = 0
+ psidWindowsUCS2 = 1
+ psidWindowsUCS4 = 10
+)
+
+// platformEncodingWidth returns the number of bytes per character assumed by
+// the given Platform ID and Platform Specific ID.
+//
+// Very old fonts, from before Unicode was widely adopted, assume only 1 byte
+// per character: a character map.
+//
+// Old fonts, from when Unicode meant the Basic Multilingual Plane (BMP),
+// assume that 2 bytes per character is sufficient.
+//
+// Recent fonts naturally support the full range of Unicode code points, which
+// can take up to 4 bytes per character. Such fonts might still choose one of
+// the legacy encodings if e.g. their repertoire is limited to the BMP, for
+// greater compatibility with older software, or because the resultant file
+// size can be smaller.
+func platformEncodingWidth(pid, psid uint16) int {
+ switch pid {
+ case pidUnicode:
+ switch psid {
+ case psidUnicode2BMPOnly:
+ return 2
+ case psidUnicode2FullRepertoire:
+ return 4
+ }
+
+ case pidMacintosh:
+ switch psid {
+ case psidMacintoshRoman:
+ return 1
+ }
+
+ case pidWindows:
+ switch psid {
+ case psidWindowsSymbol:
+ return 2
+ case psidWindowsUCS2:
+ return 2
+ case psidWindowsUCS4:
+ return 4
+ }
+ }
+ return 0
+}
+
+// The various cmap formats are described at
+// https://www.microsoft.com/typography/otspec/cmap.htm
+
+var supportedCmapFormat = func(format, pid, psid uint16) bool {
+ switch format {
+ case 0:
+ return pid == pidMacintosh && psid == psidMacintoshRoman
+ case 4:
+ return true
+ case 12:
+ return true
+ }
+ return false
+}
+
+func (f *Font) makeCachedGlyphIndex(buf []byte, offset, length uint32, format uint16) ([]byte, glyphIndexFunc, error) {
+ switch format {
+ case 0:
+ return f.makeCachedGlyphIndexFormat0(buf, offset, length)
+ case 4:
+ return f.makeCachedGlyphIndexFormat4(buf, offset, length)
+ case 12:
+ return f.makeCachedGlyphIndexFormat12(buf, offset, length)
+ }
+ panic("unreachable")
+}
+
+func (f *Font) makeCachedGlyphIndexFormat0(buf []byte, offset, length uint32) ([]byte, glyphIndexFunc, error) {
+ if length != 6+256 || offset+length > f.cmap.length {
+ return nil, nil, errInvalidCmapTable
+ }
+ var err error
+ buf, err = f.src.view(buf, int(f.cmap.offset+offset), int(length))
+ if err != nil {
+ return nil, nil, err
+ }
+ var table [256]byte
+ copy(table[:], buf[6:])
+ return buf, func(f *Font, b *Buffer, r rune) (GlyphIndex, error) {
+ // TODO: for this closure to be goroutine-safe, the
+ // golang.org/x/text/encoding/charmap API needs to allocate a new
+ // Encoder and new []byte buffers, for every call to this closure, even
+ // though all we want to do is to encode one rune as one byte. We could
+ // possibly add some fields in the Buffer struct to re-use these
+ // allocations, but a better solution is to improve the charmap API.
+ var dst, src [utf8.UTFMax]byte
+ n := utf8.EncodeRune(src[:], r)
+ _, _, err = charmap.Macintosh.NewEncoder().Transform(dst[:], src[:n], true)
+ if err != nil {
+ // The source rune r is not representable in the Macintosh-Roman encoding.
+ return 0, nil
+ }
+ return GlyphIndex(table[dst[0]]), nil
+ }, nil
+}
+
+func (f *Font) makeCachedGlyphIndexFormat4(buf []byte, offset, length uint32) ([]byte, glyphIndexFunc, error) {
+ const headerSize = 14
+ if offset+headerSize > f.cmap.length {
+ return nil, nil, errInvalidCmapTable
+ }
+ var err error
+ buf, err = f.src.view(buf, int(f.cmap.offset+offset), headerSize)
+ if err != nil {
+ return nil, nil, err
+ }
+ offset += headerSize
+
+ segCount := u16(buf[6:])
+ if segCount&1 != 0 {
+ return nil, nil, errInvalidCmapTable
+ }
+ segCount /= 2
+ if segCount > maxCmapSegments {
+ return nil, nil, errUnsupportedNumberOfCmapSegments
+ }
+
+ eLength := 8*uint32(segCount) + 2
+ if offset+eLength > f.cmap.length {
+ return nil, nil, errInvalidCmapTable
+ }
+ buf, err = f.src.view(buf, int(f.cmap.offset+offset), int(eLength))
+ if err != nil {
+ return nil, nil, err
+ }
+ offset += eLength
+
+ entries := make([]cmapEntry16, segCount)
+ for i := range entries {
+ entries[i] = cmapEntry16{
+ end: u16(buf[0*len(entries)+0+2*i:]),
+ start: u16(buf[2*len(entries)+2+2*i:]),
+ delta: u16(buf[4*len(entries)+2+2*i:]),
+ offset: u16(buf[6*len(entries)+2+2*i:]),
+ }
+ }
+ indexesBase := f.cmap.offset + offset
+ indexesLength := f.cmap.length - offset
+
+ return buf, func(f *Font, b *Buffer, r rune) (GlyphIndex, error) {
+ if uint32(r) > 0xffff {
+ return 0, nil
+ }
+
+ c := uint16(r)
+ for i, j := 0, len(entries); i < j; {
+ h := i + (j-i)/2
+ entry := &entries[h]
+ if c < entry.start {
+ j = h
+ } else if entry.end < c {
+ i = h + 1
+ } else if entry.offset == 0 {
+ return GlyphIndex(c + entry.delta), nil
+ } else {
+ offset := uint32(entry.offset) + 2*uint32(h-len(entries)+int(c-entry.start))
+ if offset > indexesLength || offset+2 > indexesLength {
+ return 0, errInvalidCmapTable
+ }
+ x, err := b.view(&f.src, int(indexesBase+offset), 2)
+ if err != nil {
+ return 0, err
+ }
+ return GlyphIndex(u16(x)), nil
+ }
+ }
+ return 0, nil
+ }, nil
+}
+
+func (f *Font) makeCachedGlyphIndexFormat12(buf []byte, offset, _ uint32) ([]byte, glyphIndexFunc, error) {
+ const headerSize = 16
+ if offset+headerSize > f.cmap.length {
+ return nil, nil, errInvalidCmapTable
+ }
+ var err error
+ buf, err = f.src.view(buf, int(f.cmap.offset+offset), headerSize)
+ if err != nil {
+ return nil, nil, err
+ }
+ length := u32(buf[4:])
+ if f.cmap.length < offset || length > f.cmap.length-offset {
+ return nil, nil, errInvalidCmapTable
+ }
+ offset += headerSize
+
+ numGroups := u32(buf[12:])
+ if numGroups > maxCmapSegments {
+ return nil, nil, errUnsupportedNumberOfCmapSegments
+ }
+
+ eLength := 12 * numGroups
+ if headerSize+eLength != length {
+ return nil, nil, errInvalidCmapTable
+ }
+ buf, err = f.src.view(buf, int(f.cmap.offset+offset), int(eLength))
+ if err != nil {
+ return nil, nil, err
+ }
+ offset += eLength
+
+ entries := make([]cmapEntry32, numGroups)
+ for i := range entries {
+ entries[i] = cmapEntry32{
+ start: u32(buf[0+12*i:]),
+ end: u32(buf[4+12*i:]),
+ delta: u32(buf[8+12*i:]),
+ }
+ }
+
+ return buf, func(f *Font, b *Buffer, r rune) (GlyphIndex, error) {
+ c := uint32(r)
+ for i, j := 0, len(entries); i < j; {
+ h := i + (j-i)/2
+ entry := &entries[h]
+ if c < entry.start {
+ j = h
+ } else if entry.end < c {
+ i = h + 1
+ } else {
+ return GlyphIndex(c - entry.start + entry.delta), nil
+ }
+ }
+ return 0, nil
+ }, nil
+}
+
+type cmapEntry16 struct {
+ end, start, delta, offset uint16
+}
+
+type cmapEntry32 struct {
+ start, end, delta uint32
+}
diff --git a/vendor/golang.org/x/image/font/sfnt/data.go b/vendor/golang.org/x/image/font/sfnt/data.go
new file mode 100644
index 000000000..ad0c139aa
--- /dev/null
+++ b/vendor/golang.org/x/image/font/sfnt/data.go
@@ -0,0 +1,68 @@
+// generated by go run gen.go; DO NOT EDIT
+
+package sfnt
+
+const numBuiltInPostNames = 258
+
+const builtInPostNamesData = "" +
+ ".notdef.nullnonmarkingreturnspaceexclamquotedblnumbersigndollarp" +
+ "ercentampersandquotesingleparenleftparenrightasteriskpluscommahy" +
+ "phenperiodslashzeroonetwothreefourfivesixseveneightninecolonsemi" +
+ "colonlessequalgreaterquestionatABCDEFGHIJKLMNOPQRSTUVWXYZbracket" +
+ "leftbackslashbracketrightasciicircumunderscoregraveabcdefghijklm" +
+ "nopqrstuvwxyzbraceleftbarbracerightasciitildeAdieresisAringCcedi" +
+ "llaEacuteNtildeOdieresisUdieresisaacuteagraveacircumflexadieresi" +
+ "satildearingccedillaeacuteegraveecircumflexedieresisiacuteigrave" +
+ "icircumflexidieresisntildeoacuteograveocircumflexodieresisotilde" +
+ "uacuteugraveucircumflexudieresisdaggerdegreecentsterlingsectionb" +
+ "ulletparagraphgermandblsregisteredcopyrighttrademarkacutedieresi" +
+ "snotequalAEOslashinfinityplusminuslessequalgreaterequalyenmupart" +
+ "ialdiffsummationproductpiintegralordfeminineordmasculineOmegaaeo" +
+ "slashquestiondownexclamdownlogicalnotradicalflorinapproxequalDel" +
+ "taguillemotleftguillemotrightellipsisnonbreakingspaceAgraveAtild" +
+ "eOtildeOEoeendashemdashquotedblleftquotedblrightquoteleftquoteri" +
+ "ghtdividelozengeydieresisYdieresisfractioncurrencyguilsinglleftg" +
+ "uilsinglrightfifldaggerdblperiodcenteredquotesinglbasequotedblba" +
+ "seperthousandAcircumflexEcircumflexAacuteEdieresisEgraveIacuteIc" +
+ "ircumflexIdieresisIgraveOacuteOcircumflexappleOgraveUacuteUcircu" +
+ "mflexUgravedotlessicircumflextildemacronbrevedotaccentringcedill" +
+ "ahungarumlautogonekcaronLslashlslashScaronscaronZcaronzcaronbrok" +
+ "enbarEthethYacuteyacuteThornthornminusmultiplyonesuperiortwosupe" +
+ "riorthreesuperioronehalfonequarterthreequartersfrancGbrevegbreve" +
+ "IdotaccentScedillascedillaCacutecacuteCcaronccarondcroat"
+
+var builtInPostNamesOffsets = [...]uint16{
+ 0x0000, 0x0007, 0x000c, 0x001c, 0x0021, 0x0027, 0x002f, 0x0039,
+ 0x003f, 0x0046, 0x004f, 0x005a, 0x0063, 0x006d, 0x0075, 0x0079,
+ 0x007e, 0x0084, 0x008a, 0x008f, 0x0093, 0x0096, 0x0099, 0x009e,
+ 0x00a2, 0x00a6, 0x00a9, 0x00ae, 0x00b3, 0x00b7, 0x00bc, 0x00c5,
+ 0x00c9, 0x00ce, 0x00d5, 0x00dd, 0x00df, 0x00e0, 0x00e1, 0x00e2,
+ 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, 0x00e8, 0x00e9, 0x00ea,
+ 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, 0x00f0, 0x00f1, 0x00f2,
+ 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, 0x00f8, 0x00f9, 0x0104,
+ 0x010d, 0x0119, 0x0124, 0x012e, 0x0133, 0x0134, 0x0135, 0x0136,
+ 0x0137, 0x0138, 0x0139, 0x013a, 0x013b, 0x013c, 0x013d, 0x013e,
+ 0x013f, 0x0140, 0x0141, 0x0142, 0x0143, 0x0144, 0x0145, 0x0146,
+ 0x0147, 0x0148, 0x0149, 0x014a, 0x014b, 0x014c, 0x014d, 0x0156,
+ 0x0159, 0x0163, 0x016d, 0x0176, 0x017b, 0x0183, 0x0189, 0x018f,
+ 0x0198, 0x01a1, 0x01a7, 0x01ad, 0x01b8, 0x01c1, 0x01c7, 0x01cc,
+ 0x01d4, 0x01da, 0x01e0, 0x01eb, 0x01f4, 0x01fa, 0x0200, 0x020b,
+ 0x0214, 0x021a, 0x0220, 0x0226, 0x0231, 0x023a, 0x0240, 0x0246,
+ 0x024c, 0x0257, 0x0260, 0x0266, 0x026c, 0x0270, 0x0278, 0x027f,
+ 0x0285, 0x028e, 0x0298, 0x02a2, 0x02ab, 0x02b4, 0x02b9, 0x02c1,
+ 0x02c9, 0x02cb, 0x02d1, 0x02d9, 0x02e2, 0x02eb, 0x02f7, 0x02fa,
+ 0x02fc, 0x0307, 0x0310, 0x0317, 0x0319, 0x0321, 0x032c, 0x0338,
+ 0x033d, 0x033f, 0x0345, 0x0351, 0x035b, 0x0365, 0x036c, 0x0372,
+ 0x037d, 0x0382, 0x038f, 0x039d, 0x03a5, 0x03b5, 0x03bb, 0x03c1,
+ 0x03c7, 0x03c9, 0x03cb, 0x03d1, 0x03d7, 0x03e3, 0x03f0, 0x03f9,
+ 0x0403, 0x0409, 0x0410, 0x0419, 0x0422, 0x042a, 0x0432, 0x043f,
+ 0x044d, 0x044f, 0x0451, 0x045a, 0x0468, 0x0476, 0x0482, 0x048d,
+ 0x0498, 0x04a3, 0x04a9, 0x04b2, 0x04b8, 0x04be, 0x04c9, 0x04d2,
+ 0x04d8, 0x04de, 0x04e9, 0x04ee, 0x04f4, 0x04fa, 0x0505, 0x050b,
+ 0x0513, 0x051d, 0x0522, 0x0528, 0x052d, 0x0536, 0x053a, 0x0541,
+ 0x054d, 0x0553, 0x0558, 0x055e, 0x0564, 0x056a, 0x0570, 0x0576,
+ 0x057c, 0x0585, 0x0588, 0x058b, 0x0591, 0x0597, 0x059c, 0x05a1,
+ 0x05a6, 0x05ae, 0x05b9, 0x05c4, 0x05d1, 0x05d8, 0x05e2, 0x05ef,
+ 0x05f4, 0x05fa, 0x0600, 0x060a, 0x0612, 0x061a, 0x0620, 0x0626,
+ 0x062c, 0x0632, 0x0638,
+}
diff --git a/vendor/golang.org/x/image/font/sfnt/example_test.go b/vendor/golang.org/x/image/font/sfnt/example_test.go
new file mode 100644
index 000000000..17431560f
--- /dev/null
+++ b/vendor/golang.org/x/image/font/sfnt/example_test.go
@@ -0,0 +1,128 @@
+// 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 sfnt_test
+
+import (
+ "image"
+ "image/draw"
+ "log"
+ "os"
+
+ "golang.org/x/image/font/gofont/goregular"
+ "golang.org/x/image/font/sfnt"
+ "golang.org/x/image/math/fixed"
+ "golang.org/x/image/vector"
+)
+
+func ExampleRasterizeGlyph() {
+ const (
+ ppem = 32
+ width = 24
+ height = 32
+ originX = 0
+ originY = 28
+ )
+
+ f, err := sfnt.Parse(goregular.TTF)
+ if err != nil {
+ log.Fatalf("Parse: %v", err)
+ }
+ var b sfnt.Buffer
+ x, err := f.GlyphIndex(&b, 'G')
+ if err != nil {
+ log.Fatalf("GlyphIndex: %v", err)
+ }
+ if x == 0 {
+ log.Fatalf("GlyphIndex: no glyph index found for the rune 'G'")
+ }
+ segments, err := f.LoadGlyph(&b, x, fixed.I(ppem), nil)
+ if err != nil {
+ log.Fatalf("LoadGlyph: %v", err)
+ }
+
+ r := vector.NewRasterizer(width, height)
+ r.DrawOp = draw.Src
+ for _, seg := range segments {
+ // The divisions by 64 below is because the seg.Args values have type
+ // fixed.Int26_6, a 26.6 fixed point number, and 1<<6 == 64.
+ switch seg.Op {
+ case sfnt.SegmentOpMoveTo:
+ r.MoveTo(
+ originX+float32(seg.Args[0])/64,
+ originY-float32(seg.Args[1])/64,
+ )
+ case sfnt.SegmentOpLineTo:
+ r.LineTo(
+ originX+float32(seg.Args[0])/64,
+ originY-float32(seg.Args[1])/64,
+ )
+ case sfnt.SegmentOpQuadTo:
+ r.QuadTo(
+ originX+float32(seg.Args[0])/64,
+ originY-float32(seg.Args[1])/64,
+ originX+float32(seg.Args[2])/64,
+ originY-float32(seg.Args[3])/64,
+ )
+ case sfnt.SegmentOpCubeTo:
+ r.CubeTo(
+ originX+float32(seg.Args[0])/64,
+ originY-float32(seg.Args[1])/64,
+ originX+float32(seg.Args[2])/64,
+ originY-float32(seg.Args[3])/64,
+ originX+float32(seg.Args[4])/64,
+ originY-float32(seg.Args[5])/64,
+ )
+ }
+ }
+ // TODO: call ClosePath? Once overall or once per contour (i.e. MoveTo)?
+
+ dst := image.NewAlpha(image.Rect(0, 0, width, height))
+ r.Draw(dst, dst.Bounds(), image.Opaque, image.Point{})
+
+ const asciiArt = ".++8"
+ buf := make([]byte, 0, height*(width+1))
+ for y := 0; y < height; y++ {
+ for x := 0; x < width; x++ {
+ a := dst.AlphaAt(x, y).A
+ buf = append(buf, asciiArt[a>>6])
+ }
+ buf = append(buf, '\n')
+ }
+ os.Stdout.Write(buf)
+
+ // Output:
+ // ........................
+ // ........................
+ // ........................
+ // ........................
+ // ..........+++++++++.....
+ // .......+8888888888888+..
+ // ......8888888888888888..
+ // ....+8888+........++88..
+ // ....8888................
+ // ...8888.................
+ // ..+888+.................
+ // ..+888..................
+ // ..888+..................
+ // .+888+..................
+ // .+888...................
+ // .+888...................
+ // .+888...................
+ // .+888..........+++++++..
+ // .+888..........8888888..
+ // .+888+.........+++8888..
+ // ..888+............+888..
+ // ..8888............+888..
+ // ..+888+...........+888..
+ // ...8888+..........+888..
+ // ...+8888+.........+888..
+ // ....+88888+.......+888..
+ // .....+8888888888888888..
+ // .......+888888888888++..
+ // ..........++++++++......
+ // ........................
+ // ........................
+ // ........................
+}
diff --git a/vendor/golang.org/x/image/font/sfnt/gen.go b/vendor/golang.org/x/image/font/sfnt/gen.go
new file mode 100644
index 000000000..12587d446
--- /dev/null
+++ b/vendor/golang.org/x/image/font/sfnt/gen.go
@@ -0,0 +1,321 @@
+// 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.
+
+// +build ignore
+
+package main
+
+import (
+ "bytes"
+ "fmt"
+ "go/format"
+ "io/ioutil"
+ "log"
+)
+
+func main() {
+ data, offsets := []byte(nil), []int{0}
+ for _, name := range names {
+ data = append(data, name...)
+ offsets = append(offsets, len(data))
+ }
+
+ b := new(bytes.Buffer)
+ fmt.Fprintf(b, "// generated by go run gen.go; DO NOT EDIT\n\n")
+ fmt.Fprintf(b, "package sfnt\n\n")
+
+ fmt.Fprintf(b, "const numBuiltInPostNames = %d\n\n", len(names))
+
+ fmt.Fprintf(b, "const builtInPostNamesData = \"\" +\n")
+ for s := data; ; {
+ if len(s) <= 64 {
+ fmt.Fprintf(b, "%q\n", s)
+ break
+ }
+ fmt.Fprintf(b, "%q +\n", s[:64])
+ s = s[64:]
+ }
+ fmt.Fprintf(b, "\n")
+
+ fmt.Fprintf(b, "var builtInPostNamesOffsets = [...]uint16{\n")
+ for i, o := range offsets {
+ fmt.Fprintf(b, "%#04x,", o)
+ if i%8 == 7 {
+ fmt.Fprintf(b, "\n")
+ }
+ }
+ fmt.Fprintf(b, "\n}\n")
+
+ dstUnformatted := b.Bytes()
+ dst, err := format.Source(dstUnformatted)
+ if err != nil {
+ log.Fatalf("format.Source: %v\n\n----\n%s\n----", err, dstUnformatted)
+ }
+ if err := ioutil.WriteFile("data.go", dst, 0666); err != nil {
+ log.Fatalf("ioutil.WriteFile: %v", err)
+ }
+}
+
+// names is the built-in post table names listed at
+// https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6post.html
+var names = [258]string{
+ ".notdef",
+ ".null",
+ "nonmarkingreturn",
+ "space",
+ "exclam",
+ "quotedbl",
+ "numbersign",
+ "dollar",
+ "percent",
+ "ampersand",
+ "quotesingle",
+ "parenleft",
+ "parenright",
+ "asterisk",
+ "plus",
+ "comma",
+ "hyphen",
+ "period",
+ "slash",
+ "zero",
+ "one",
+ "two",
+ "three",
+ "four",
+ "five",
+ "six",
+ "seven",
+ "eight",
+ "nine",
+ "colon",
+ "semicolon",
+ "less",
+ "equal",
+ "greater",
+ "question",
+ "at",
+ "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",
+ "bracketleft",
+ "backslash",
+ "bracketright",
+ "asciicircum",
+ "underscore",
+ "grave",
+ "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",
+ "braceleft",
+ "bar",
+ "braceright",
+ "asciitilde",
+ "Adieresis",
+ "Aring",
+ "Ccedilla",
+ "Eacute",
+ "Ntilde",
+ "Odieresis",
+ "Udieresis",
+ "aacute",
+ "agrave",
+ "acircumflex",
+ "adieresis",
+ "atilde",
+ "aring",
+ "ccedilla",
+ "eacute",
+ "egrave",
+ "ecircumflex",
+ "edieresis",
+ "iacute",
+ "igrave",
+ "icircumflex",
+ "idieresis",
+ "ntilde",
+ "oacute",
+ "ograve",
+ "ocircumflex",
+ "odieresis",
+ "otilde",
+ "uacute",
+ "ugrave",
+ "ucircumflex",
+ "udieresis",
+ "dagger",
+ "degree",
+ "cent",
+ "sterling",
+ "section",
+ "bullet",
+ "paragraph",
+ "germandbls",
+ "registered",
+ "copyright",
+ "trademark",
+ "acute",
+ "dieresis",
+ "notequal",
+ "AE",
+ "Oslash",
+ "infinity",
+ "plusminus",
+ "lessequal",
+ "greaterequal",
+ "yen",
+ "mu",
+ "partialdiff",
+ "summation",
+ "product",
+ "pi",
+ "integral",
+ "ordfeminine",
+ "ordmasculine",
+ "Omega",
+ "ae",
+ "oslash",
+ "questiondown",
+ "exclamdown",
+ "logicalnot",
+ "radical",
+ "florin",
+ "approxequal",
+ "Delta",
+ "guillemotleft",
+ "guillemotright",
+ "ellipsis",
+ "nonbreakingspace",
+ "Agrave",
+ "Atilde",
+ "Otilde",
+ "OE",
+ "oe",
+ "endash",
+ "emdash",
+ "quotedblleft",
+ "quotedblright",
+ "quoteleft",
+ "quoteright",
+ "divide",
+ "lozenge",
+ "ydieresis",
+ "Ydieresis",
+ "fraction",
+ "currency",
+ "guilsinglleft",
+ "guilsinglright",
+ "fi",
+ "fl",
+ "daggerdbl",
+ "periodcentered",
+ "quotesinglbase",
+ "quotedblbase",
+ "perthousand",
+ "Acircumflex",
+ "Ecircumflex",
+ "Aacute",
+ "Edieresis",
+ "Egrave",
+ "Iacute",
+ "Icircumflex",
+ "Idieresis",
+ "Igrave",
+ "Oacute",
+ "Ocircumflex",
+ "apple",
+ "Ograve",
+ "Uacute",
+ "Ucircumflex",
+ "Ugrave",
+ "dotlessi",
+ "circumflex",
+ "tilde",
+ "macron",
+ "breve",
+ "dotaccent",
+ "ring",
+ "cedilla",
+ "hungarumlaut",
+ "ogonek",
+ "caron",
+ "Lslash",
+ "lslash",
+ "Scaron",
+ "scaron",
+ "Zcaron",
+ "zcaron",
+ "brokenbar",
+ "Eth",
+ "eth",
+ "Yacute",
+ "yacute",
+ "Thorn",
+ "thorn",
+ "minus",
+ "multiply",
+ "onesuperior",
+ "twosuperior",
+ "threesuperior",
+ "onehalf",
+ "onequarter",
+ "threequarters",
+ "franc",
+ "Gbreve",
+ "gbreve",
+ "Idotaccent",
+ "Scedilla",
+ "scedilla",
+ "Cacute",
+ "cacute",
+ "Ccaron",
+ "ccaron",
+ "dcroat",
+}
diff --git a/vendor/golang.org/x/image/font/sfnt/postscript.go b/vendor/golang.org/x/image/font/sfnt/postscript.go
index d5d6d9aed..ca1b8318c 100644
--- a/vendor/golang.org/x/image/font/sfnt/postscript.go
+++ b/vendor/golang.org/x/image/font/sfnt/postscript.go
@@ -566,8 +566,8 @@ var psOperators = [...][2][]psOperator{
23: {-1, "vstemhm", t2CStem},
24: {}, // rcurveline.
25: {}, // rlinecurve.
- 26: {}, // vvcurveto.
- 27: {}, // hhcurveto.
+ 26: {-1, "vvcurveto", t2CVvcurveto},
+ 27: {-1, "hhcurveto", t2CHhcurveto},
28: {}, // shortint.
29: {}, // callgsubr.
30: {-1, "vhcurveto", t2CVhcurveto},
@@ -653,8 +653,8 @@ func t2CAppendMoveto(p *psInterpreter) {
p.type2Charstrings.segments = append(p.type2Charstrings.segments, Segment{
Op: SegmentOpMoveTo,
Args: [6]fixed.Int26_6{
- 0: fixed.Int26_6(p.type2Charstrings.x) << 6,
- 1: fixed.Int26_6(p.type2Charstrings.y) << 6,
+ 0: fixed.Int26_6(p.type2Charstrings.x),
+ 1: fixed.Int26_6(p.type2Charstrings.y),
},
})
}
@@ -663,8 +663,8 @@ func t2CAppendLineto(p *psInterpreter) {
p.type2Charstrings.segments = append(p.type2Charstrings.segments, Segment{
Op: SegmentOpLineTo,
Args: [6]fixed.Int26_6{
- 0: fixed.Int26_6(p.type2Charstrings.x) << 6,
- 1: fixed.Int26_6(p.type2Charstrings.y) << 6,
+ 0: fixed.Int26_6(p.type2Charstrings.x),
+ 1: fixed.Int26_6(p.type2Charstrings.y),
},
})
}
@@ -685,12 +685,12 @@ func t2CAppendCubeto(p *psInterpreter, dxa, dya, dxb, dyb, dxc, dyc int32) {
p.type2Charstrings.segments = append(p.type2Charstrings.segments, Segment{
Op: SegmentOpCubeTo,
Args: [6]fixed.Int26_6{
- 0: fixed.Int26_6(xa) << 6,
- 1: fixed.Int26_6(ya) << 6,
- 2: fixed.Int26_6(xb) << 6,
- 3: fixed.Int26_6(yb) << 6,
- 4: fixed.Int26_6(xc) << 6,
- 5: fixed.Int26_6(yc) << 6,
+ 0: fixed.Int26_6(xa),
+ 1: fixed.Int26_6(ya),
+ 2: fixed.Int26_6(xb),
+ 3: fixed.Int26_6(yb),
+ 4: fixed.Int26_6(xc),
+ 5: fixed.Int26_6(yc),
},
})
}
@@ -770,6 +770,12 @@ func t2CRlineto(p *psInterpreter) error {
// As per 5177.Type2.pdf section 4.1 "Path Construction Operators",
//
+// hhcurveto is:
+// - dy1 {dxa dxb dyb dxc}+
+//
+// vvcurveto is:
+// - dx1 {dya dxb dyb dyc}+
+//
// hvcurveto is one of:
// - dx1 dx2 dy2 dy3 {dya dxb dyb dxc dxd dxe dye dyf}* dxf?
// - {dxa dxb dyb dyc dyd dxe dye dxf}+ dyf?
@@ -778,59 +784,84 @@ func t2CRlineto(p *psInterpreter) error {
// - dy1 dx2 dy2 dx3 {dxa dxb dyb dyc dyd dxe dye dxf}* dyf?
// - {dya dxb dyb dxc dxd dxe dye dyf}+ dxf?
-func t2CHvcurveto(p *psInterpreter) error { return t2CCurveto(p, false) }
-func t2CVhcurveto(p *psInterpreter) error { return t2CCurveto(p, true) }
+func t2CHhcurveto(p *psInterpreter) error { return t2CCurveto(p, false, false) }
+func t2CVvcurveto(p *psInterpreter) error { return t2CCurveto(p, false, true) }
+func t2CHvcurveto(p *psInterpreter) error { return t2CCurveto(p, true, false) }
+func t2CVhcurveto(p *psInterpreter) error { return t2CCurveto(p, true, true) }
-func t2CCurveto(p *psInterpreter, vertical bool) error {
+// t2CCurveto implements the hh / vv / hv / vh xxcurveto operators. N relative
+// cubic curve requires 6*N control points, but only 4*N+0 or 4*N+1 are used
+// here: all (or all but one) of the piecewise cubic curve's tangents are
+// implicitly horizontal or vertical.
+//
+// swap is whether that implicit horizontal / vertical constraint swaps as you
+// move along the piecewise cubic curve. If swap is false, the constraints are
+// either all horizontal or all vertical. If swap is true, it alternates.
+//
+// vertical is whether the first implicit constraint is vertical.
+func t2CCurveto(p *psInterpreter, swap, vertical bool) error {
if !p.type2Charstrings.seenWidth || p.stack.top < 4 {
return errInvalidCFFTable
}
- for i := int32(0); i != p.stack.top; vertical = !vertical {
+
+ i := int32(0)
+ switch p.stack.top & 3 {
+ case 0:
+ // No-op.
+ case 1:
+ if swap {
+ break
+ }
+ i = 1
if vertical {
- i = t2CVcurveto(p, i)
+ p.type2Charstrings.x += p.stack.a[0]
} else {
- i = t2CHcurveto(p, i)
+ p.type2Charstrings.y += p.stack.a[0]
}
+ default:
+ return errInvalidCFFTable
+ }
+
+ for i != p.stack.top {
+ i = t2CCurveto4(p, swap, vertical, i)
if i < 0 {
return errInvalidCFFTable
}
+ if swap {
+ vertical = !vertical
+ }
}
return nil
}
-func t2CHcurveto(p *psInterpreter, i int32) (j int32) {
+func t2CCurveto4(p *psInterpreter, swap bool, vertical bool, i int32) (j int32) {
if i+4 > p.stack.top {
return -1
}
dxa := p.stack.a[i+0]
+ dya := int32(0)
dxb := p.stack.a[i+1]
dyb := p.stack.a[i+2]
- dyc := p.stack.a[i+3]
- dxc := int32(0)
+ dxc := p.stack.a[i+3]
+ dyc := int32(0)
i += 4
- if i+1 == p.stack.top {
- dxc = p.stack.a[i]
- i++
+
+ if vertical {
+ dxa, dya = dya, dxa
}
- t2CAppendCubeto(p, dxa, 0, dxb, dyb, dxc, dyc)
- return i
-}
-func t2CVcurveto(p *psInterpreter, i int32) (j int32) {
- if i+4 > p.stack.top {
- return -1
+ if swap {
+ if i+1 == p.stack.top {
+ dyc = p.stack.a[i]
+ i++
+ }
}
- dya := p.stack.a[i+0]
- dxb := p.stack.a[i+1]
- dyb := p.stack.a[i+2]
- dxc := p.stack.a[i+3]
- dyc := int32(0)
- i += 4
- if i+1 == p.stack.top {
- dyc = p.stack.a[i]
- i++
+
+ if swap != vertical {
+ dxc, dyc = dyc, dxc
}
- t2CAppendCubeto(p, 0, dya, dxb, dyb, dxc, dyc)
+
+ t2CAppendCubeto(p, dxa, dya, dxb, dyb, dxc, dyc)
return i
}
diff --git a/vendor/golang.org/x/image/font/sfnt/proprietary_test.go b/vendor/golang.org/x/image/font/sfnt/proprietary_test.go
new file mode 100644
index 000000000..b105ee593
--- /dev/null
+++ b/vendor/golang.org/x/image/font/sfnt/proprietary_test.go
@@ -0,0 +1,479 @@
+// 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 sfnt
+
+/*
+This file contains opt-in tests for popular, high quality, proprietary fonts,
+made by companies such as Adobe and Microsoft. These fonts are generally
+available, but copies are not explicitly included in this repository due to
+licensing differences or file size concerns. To opt-in, run:
+
+go test golang.org/x/image/font/sfnt -args -proprietary
+
+Not all tests pass out-of-the-box on all systems. For example, the Microsoft
+Times New Roman font is downloadable gratis even on non-Windows systems, but as
+per the ttf-mscorefonts-installer Debian package, this requires accepting an
+End User License Agreement (EULA) and a CAB format decoder. These tests assume
+that such fonts have already been installed. You may need to specify the
+directories for these fonts:
+
+go test golang.org/x/image/font/sfnt -args -proprietary -adobeDir=/foo/bar/aFonts -microsoftDir=/foo/bar/mFonts
+
+To only run those tests for the Microsoft fonts:
+
+go test golang.org/x/image/font/sfnt -test.run=ProprietaryMicrosoft -args -proprietary
+*/
+
+// TODO: add Apple system fonts? Google fonts (Droid? Noto?)? Emoji fonts?
+
+// TODO: enable Apple/Microsoft tests by default on Darwin/Windows?
+
+import (
+ "errors"
+ "flag"
+ "io/ioutil"
+ "path/filepath"
+ "testing"
+
+ "golang.org/x/image/font"
+ "golang.org/x/image/math/fixed"
+)
+
+var (
+ proprietary = flag.Bool("proprietary", false, "test proprietary fonts not included in this repository")
+
+ adobeDir = flag.String(
+ "adobeDir",
+ // This needs to be set explicitly. There is no default dir on Debian:
+ // https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=736680
+ //
+ // Get the fonts from https://github.com/adobe-fonts, e.g.:
+ // - https://github.com/adobe-fonts/source-code-pro/releases/latest
+ // - https://github.com/adobe-fonts/source-han-sans/releases/latest
+ // - https://github.com/adobe-fonts/source-sans-pro/releases/latest
+ //
+ // Copy all of the TTF and OTF files to the one directory, such as
+ // $HOME/adobe-fonts, and pass that as the -adobeDir flag here.
+ "",
+ "directory name for the Adobe proprietary fonts",
+ )
+
+ microsoftDir = flag.String(
+ "microsoftDir",
+ "/usr/share/fonts/truetype/msttcorefonts",
+ "directory name for the Microsoft proprietary fonts",
+ )
+)
+
+func TestProprietaryAdobeSourceCodeProOTF(t *testing.T) {
+ testProprietary(t, "adobe", "SourceCodePro-Regular.otf", 1500, 2)
+}
+
+func TestProprietaryAdobeSourceCodeProTTF(t *testing.T) {
+ testProprietary(t, "adobe", "SourceCodePro-Regular.ttf", 1500, 36)
+}
+
+func TestProprietaryAdobeSourceHanSansSC(t *testing.T) {
+ testProprietary(t, "adobe", "SourceHanSansSC-Regular.otf", 65535, 2)
+}
+
+func TestProprietaryAdobeSourceSansProOTF(t *testing.T) {
+ testProprietary(t, "adobe", "SourceSansPro-Regular.otf", 1800, 2)
+}
+
+func TestProprietaryAdobeSourceSansProTTF(t *testing.T) {
+ testProprietary(t, "adobe", "SourceSansPro-Regular.ttf", 1800, 54)
+}
+
+func TestProprietaryMicrosoftArial(t *testing.T) {
+ testProprietary(t, "microsoft", "Arial.ttf", 1200, 98)
+}
+
+func TestProprietaryMicrosoftComicSansMS(t *testing.T) {
+ testProprietary(t, "microsoft", "Comic_Sans_MS.ttf", 550, 98)
+}
+
+func TestProprietaryMicrosoftTimesNewRoman(t *testing.T) {
+ testProprietary(t, "microsoft", "Times_New_Roman.ttf", 1200, 98)
+}
+
+func TestProprietaryMicrosoftWebdings(t *testing.T) {
+ testProprietary(t, "microsoft", "Webdings.ttf", 200, -1)
+}
+
+// testProprietary tests that we can load every glyph in the named font.
+//
+// The exact number of glyphs in the font can differ across its various
+// versions, but as a sanity check, there should be at least minNumGlyphs.
+//
+// While this package is a work-in-progress, not every glyph can be loaded. The
+// firstUnsupportedGlyph argument, if non-negative, is the index of the first
+// unsupported glyph in the font. This number should increase over time (or set
+// negative), as the TODO's in this package are done.
+func testProprietary(t *testing.T, proprietor, filename string, minNumGlyphs, firstUnsupportedGlyph int) {
+ if !*proprietary {
+ t.Skip("skipping proprietary font test")
+ }
+
+ file, err := []byte(nil), error(nil)
+ switch proprietor {
+ case "adobe":
+ file, err = ioutil.ReadFile(filepath.Join(*adobeDir, filename))
+ if err != nil {
+ t.Fatalf("%v\nPerhaps you need to set the -adobeDir=%v flag?", err, *adobeDir)
+ }
+ case "microsoft":
+ file, err = ioutil.ReadFile(filepath.Join(*microsoftDir, filename))
+ if err != nil {
+ t.Fatalf("%v\nPerhaps you need to set the -microsoftDir=%v flag?", err, *microsoftDir)
+ }
+ default:
+ panic("unreachable")
+ }
+ f, err := Parse(file)
+ if err != nil {
+ t.Fatalf("Parse: %v", err)
+ }
+ ppem := fixed.Int26_6(f.UnitsPerEm())
+ qualifiedFilename := proprietor + "/" + filename
+ var buf Buffer
+
+ // Some of the tests below, such as which glyph index a particular rune
+ // maps to, can depend on the specific version of the proprietary font. If
+ // tested against a different version of that font, the test might (but not
+ // necessarily will) fail, even though the Go code is good. If so, log a
+ // message, but don't automatically fail (i.e. dont' call t.Fatalf).
+ gotVersion, err := f.Name(&buf, NameIDVersion)
+ if err != nil {
+ t.Fatalf("Name: %v", err)
+ }
+ wantVersion := proprietaryVersions[qualifiedFilename]
+ if gotVersion != wantVersion {
+ t.Logf("font version provided differs from the one the tests were written against:"+
+ "\ngot %q\nwant %q", gotVersion, wantVersion)
+ }
+
+ numGlyphs := f.NumGlyphs()
+ if numGlyphs < minNumGlyphs {
+ t.Fatalf("NumGlyphs: got %d, want at least %d", numGlyphs, minNumGlyphs)
+ }
+
+ iMax := numGlyphs
+ if firstUnsupportedGlyph >= 0 {
+ iMax = firstUnsupportedGlyph
+ }
+ for i, numErrors := 0, 0; i < iMax; i++ {
+ if _, err := f.LoadGlyph(&buf, GlyphIndex(i), ppem, nil); err != nil {
+ t.Errorf("LoadGlyph(%d): %v", i, err)
+ numErrors++
+ }
+ if numErrors == 10 {
+ t.Fatal("LoadGlyph: too many errors")
+ }
+ }
+
+ for r, want := range proprietaryGlyphIndexTestCases[qualifiedFilename] {
+ got, err := f.GlyphIndex(&buf, r)
+ if err != nil {
+ t.Errorf("GlyphIndex(%q): %v", r, err)
+ continue
+ }
+ if got != want {
+ t.Errorf("GlyphIndex(%q): got %d, want %d", r, got, want)
+ continue
+ }
+ }
+
+ for r, want := range proprietaryGlyphTestCases[qualifiedFilename] {
+ x, err := f.GlyphIndex(&buf, r)
+ if err != nil {
+ t.Errorf("GlyphIndex(%q): %v", r, err)
+ continue
+ }
+ got, err := f.LoadGlyph(&buf, x, ppem, nil)
+ if err != nil {
+ t.Errorf("LoadGlyph(%q): %v", r, err)
+ continue
+ }
+ if err := checkSegmentsEqual(got, want); err != nil {
+ t.Errorf("LoadGlyph(%q): %v", r, err)
+ continue
+ }
+ }
+
+kernLoop:
+ for _, tc := range proprietaryKernTestCases[qualifiedFilename] {
+ var indexes [2]GlyphIndex
+ for i := range indexes {
+ x, err := f.GlyphIndex(&buf, tc.runes[i])
+ if x == 0 && err == nil {
+ err = errors.New("no glyph index found")
+ }
+ if err != nil {
+ t.Errorf("GlyphIndex(%q): %v", tc.runes[0], err)
+ continue kernLoop
+ }
+ indexes[i] = x
+ }
+ kern, err := f.Kern(&buf, indexes[0], indexes[1], tc.ppem, tc.hinting)
+ if err != nil {
+ t.Errorf("Kern(%q, %q, ppem=%d, hinting=%v): %v",
+ tc.runes[0], tc.runes[1], tc.ppem, tc.hinting, err)
+ continue
+ }
+ if got := Units(kern); got != tc.want {
+ t.Errorf("Kern(%q, %q, ppem=%d, hinting=%v): got %d, want %d",
+ tc.runes[0], tc.runes[1], tc.ppem, tc.hinting, got, tc.want)
+ continue
+ }
+ }
+}
+
+// proprietaryVersions holds the expected version string of each proprietary
+// font tested. If third parties such as Adobe or Microsoft update their fonts,
+// and the tests subsequently fail, these versions should be updated too.
+//
+// Updates are expected to be infrequent. For example, as of 2017, the fonts
+// installed by the Debian ttf-mscorefonts-installer package have last modified
+// times no later than 2001.
+var proprietaryVersions = map[string]string{
+ "adobe/SourceCodePro-Regular.otf": "Version 2.030;PS 1.0;hotconv 16.6.51;makeotf.lib2.5.65220",
+ "adobe/SourceCodePro-Regular.ttf": "Version 2.030;PS 1.000;hotconv 16.6.51;makeotf.lib2.5.65220",
+ "adobe/SourceHanSansSC-Regular.otf": "Version 1.004;PS 1.004;hotconv 1.0.82;makeotf.lib2.5.63406",
+ "adobe/SourceSansPro-Regular.otf": "Version 2.020;PS 2.0;hotconv 1.0.86;makeotf.lib2.5.63406",
+ "adobe/SourceSansPro-Regular.ttf": "Version 2.020;PS 2.000;hotconv 1.0.86;makeotf.lib2.5.63406",
+
+ "microsoft/Arial.ttf": "Version 2.82",
+ "microsoft/Comic_Sans_MS.ttf": "Version 2.10",
+ "microsoft/Times_New_Roman.ttf": "Version 2.82",
+ "microsoft/Webdings.ttf": "Version 1.03",
+}
+
+// proprietaryGlyphIndexTestCases hold a sample of each font's rune to glyph
+// index cmap. The numerical values can be verified by running the ttx tool.
+var proprietaryGlyphIndexTestCases = map[string]map[rune]GlyphIndex{
+ "adobe/SourceCodePro-Regular.otf": {
+ '\u0030': 877, // U+0030 DIGIT ZERO
+ '\u0041': 2, // U+0041 LATIN CAPITAL LETTER A
+ '\u0061': 28, // U+0061 LATIN SMALL LETTER A
+ '\u0104': 64, // U+0104 LATIN CAPITAL LETTER A WITH OGONEK
+ '\u0125': 323, // U+0125 LATIN SMALL LETTER H WITH CIRCUMFLEX
+ '\u01f4': 111, // U+01F4 LATIN CAPITAL LETTER G WITH ACUTE
+ '\u03a3': 623, // U+03A3 GREEK CAPITAL LETTER SIGMA
+ '\u2569': 1500, // U+2569 BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+ '\U0001f100': 0, // U+0001F100 DIGIT ZERO FULL STOP
+ },
+ "adobe/SourceCodePro-Regular.ttf": {
+ '\u0030': 877, // U+0030 DIGIT ZERO
+ '\u0041': 2, // U+0041 LATIN CAPITAL LETTER A
+ '\u01f4': 111, // U+01F4 LATIN CAPITAL LETTER G WITH ACUTE
+ },
+ "adobe/SourceHanSansSC-Regular.otf": {
+ '\u0030': 17, // U+0030 DIGIT ZERO
+ '\u0041': 34, // U+0041 LATIN CAPITAL LETTER A
+ '\u00d7': 150, // U+00D7 MULTIPLICATION SIGN
+ '\u1100': 365, // U+1100 HANGUL CHOSEONG KIYEOK
+ '\u25ca': 1254, // U+25CA LOZENGE
+ '\u2e9c': 1359, // U+2E9C CJK RADICAL SUN
+ '\u304b': 1463, // U+304B HIRAGANA LETTER KA
+ '\u4e2d': 9893, // U+4E2D <CJK Ideograph>, 中
+ '\ua960': 47537, // U+A960 HANGUL CHOSEONG TIKEUT-MIEUM
+ '\ufb00': 58919, // U+FB00 LATIN SMALL LIGATURE FF
+ '\uffee': 59213, // U+FFEE HALFWIDTH WHITE CIRCLE
+ '\U0001f100': 59214, // U+0001F100 DIGIT ZERO FULL STOP
+ '\U0001f248': 59449, // U+0001F248 TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
+ '\U0002f9f4': 61768, // U+0002F9F4 CJK COMPATIBILITY IDEOGRAPH-2F9F4
+ },
+ "adobe/SourceSansPro-Regular.otf": {
+ '\u0041': 2, // U+0041 LATIN CAPITAL LETTER A
+ '\u03a3': 592, // U+03A3 GREEK CAPITAL LETTER SIGMA
+ '\u0435': 999, // U+0435 CYRILLIC SMALL LETTER IE
+ '\u2030': 1728, // U+2030 PER MILLE SIGN
+ },
+ "adobe/SourceSansPro-Regular.ttf": {
+ '\u0041': 2, // U+0041 LATIN CAPITAL LETTER A
+ '\u03a3': 592, // U+03A3 GREEK CAPITAL LETTER SIGMA
+ '\u0435': 999, // U+0435 CYRILLIC SMALL LETTER IE
+ '\u2030': 1728, // U+2030 PER MILLE SIGN
+ },
+
+ "microsoft/Arial.ttf": {
+ '\u0041': 36, // U+0041 LATIN CAPITAL LETTER A
+ '\u00f1': 120, // U+00F1 LATIN SMALL LETTER N WITH TILDE
+ '\u0401': 556, // U+0401 CYRILLIC CAPITAL LETTER IO
+ '\u200d': 745, // U+200D ZERO WIDTH JOINER
+ '\u20ab': 1150, // U+20AB DONG SIGN
+ '\u2229': 320, // U+2229 INTERSECTION
+ '\u04e9': 1319, // U+04E9 CYRILLIC SMALL LETTER BARRED O
+ '\U0001f100': 0, // U+0001F100 DIGIT ZERO FULL STOP
+ },
+ "microsoft/Comic_Sans_MS.ttf": {
+ '\u0041': 36, // U+0041 LATIN CAPITAL LETTER A
+ '\u03af': 573, // U+03AF GREEK SMALL LETTER IOTA WITH TONOS
+ },
+ "microsoft/Times_New_Roman.ttf": {
+ '\u0041': 36, // U+0041 LATIN CAPITAL LETTER A
+ '\u0042': 37, // U+0041 LATIN CAPITAL LETTER B
+ '\u266a': 392, // U+266A EIGHTH NOTE
+ '\uf041': 0, // PRIVATE USE AREA
+ '\uf042': 0, // PRIVATE USE AREA
+ },
+ "microsoft/Webdings.ttf": {
+ '\u0041': 0, // U+0041 LATIN CAPITAL LETTER A
+ '\u0042': 0, // U+0041 LATIN CAPITAL LETTER B
+ '\u266a': 0, // U+266A EIGHTH NOTE
+ '\uf041': 36, // PRIVATE USE AREA
+ '\uf042': 37, // PRIVATE USE AREA
+ },
+}
+
+// proprietaryGlyphTestCases hold a sample of each font's glyph vectors. The
+// numerical values can be verified by running the ttx tool, remembering that:
+// - for PostScript glyphs, ttx coordinates are relative, and hstem / vstem
+// operators are hinting-related and can be ignored.
+// - for TrueType glyphs, ttx coordinates are absolute, and consecutive
+// off-curve points implies an on-curve point at the midpoint.
+var proprietaryGlyphTestCases = map[string]map[rune][]Segment{
+ "adobe/SourceSansPro-Regular.otf": {
+ ',': {
+ // - contour #0
+ // 67 -170 rmoveto
+ moveTo(67, -170),
+ // 81 34 50 67 86 vvcurveto
+ cubeTo(148, -136, 198, -69, 198, 17),
+ // 60 -26 37 -43 -33 -28 -22 -36 -37 27 -20 32 3 4 0 1 3 vhcurveto
+ cubeTo(198, 77, 172, 114, 129, 114),
+ cubeTo(96, 114, 68, 92, 68, 56),
+ cubeTo(68, 19, 95, -1, 127, -1),
+ cubeTo(130, -1, 134, -1, 137, 0),
+ // 1 -53 -34 -44 -57 -25 rrcurveto
+ cubeTo(138, -53, 104, -97, 47, -122),
+ },
+ 'Q': {
+ // - contour #0
+ // 332 57 rmoveto
+ moveTo(332, 57),
+ // -117 -77 106 168 163 77 101 117 117 77 -101 -163 -168 -77 -106 -117 hvcurveto
+ cubeTo(215, 57, 138, 163, 138, 331),
+ cubeTo(138, 494, 215, 595, 332, 595),
+ cubeTo(449, 595, 526, 494, 526, 331),
+ cubeTo(526, 163, 449, 57, 332, 57),
+ // - contour #1
+ // 201 -222 rmoveto
+ moveTo(533, -165),
+ // 39 35 7 8 20 hvcurveto
+ cubeTo(572, -165, 607, -158, 627, -150),
+ // -16 64 rlineto
+ lineTo(611, -86),
+ // -5 -18 -22 -4 -29 hhcurveto
+ cubeTo(593, -91, 571, -95, 542, -95),
+ // -71 -60 29 58 -30 hvcurveto
+ cubeTo(471, -95, 411, -66, 381, -8),
+ // 139 24 93 126 189 vvcurveto
+ cubeTo(520, 16, 613, 142, 613, 331),
+ // 209 -116 128 -165 -165 -115 -127 -210 -193 96 -127 143 -20 vhcurveto
+ cubeTo(613, 540, 497, 668, 332, 668),
+ cubeTo(167, 668, 52, 541, 52, 331),
+ cubeTo(52, 138, 148, 11, 291, -9),
+ // -90 38 83 -66 121 hhcurveto
+ cubeTo(329, -99, 412, -165, 533, -165),
+ },
+ },
+
+ "microsoft/Arial.ttf": {
+ ',': {
+ // - contour #0
+ moveTo(182, 0),
+ lineTo(182, 205),
+ lineTo(387, 205),
+ lineTo(387, 0),
+ quadTo(387, -113, 347, -182),
+ quadTo(307, -252, 220, -290),
+ lineTo(170, -213),
+ quadTo(227, -188, 254, -139),
+ quadTo(281, -91, 284, 0),
+ lineTo(182, 0),
+ },
+ 'i': {
+ // - contour #0
+ moveTo(136, 1259),
+ lineTo(136, 1466),
+ lineTo(316, 1466),
+ lineTo(316, 1259),
+ lineTo(136, 1259),
+ // - contour #1
+ moveTo(136, 0),
+ lineTo(136, 1062),
+ lineTo(316, 1062),
+ lineTo(316, 0),
+ lineTo(136, 0),
+ },
+ 'o': {
+ // - contour #0
+ moveTo(68, 531),
+ quadTo(68, 826, 232, 968),
+ quadTo(369, 1086, 566, 1086),
+ quadTo(785, 1086, 924, 942),
+ quadTo(1063, 799, 1063, 546),
+ quadTo(1063, 341, 1001, 223),
+ quadTo(940, 106, 822, 41),
+ quadTo(705, -24, 566, -24),
+ quadTo(343, -24, 205, 119),
+ quadTo(68, 262, 68, 531),
+ // - contour #1
+ moveTo(253, 531),
+ quadTo(253, 327, 342, 225),
+ quadTo(431, 124, 566, 124),
+ quadTo(700, 124, 789, 226),
+ quadTo(878, 328, 878, 537),
+ quadTo(878, 734, 788, 835),
+ quadTo(699, 937, 566, 937),
+ quadTo(431, 937, 342, 836),
+ quadTo(253, 735, 253, 531),
+ },
+ },
+}
+
+type kernTestCase struct {
+ ppem fixed.Int26_6
+ hinting font.Hinting
+ runes [2]rune
+ want Units
+}
+
+// proprietaryKernTestCases hold a sample of each font's kerning pairs. The
+// numerical values can be verified by running the ttx tool.
+var proprietaryKernTestCases = map[string][]kernTestCase{
+ "microsoft/Arial.ttf": {
+ {2048, font.HintingNone, [2]rune{'A', 'V'}, -152},
+ // U+03B8 GREEK SMALL LETTER THETA
+ // U+03BB GREEK SMALL LETTER LAMDA
+ {2048, font.HintingNone, [2]rune{'\u03b8', '\u03bb'}, -39},
+ {2048, font.HintingNone, [2]rune{'\u03bb', '\u03b8'}, -0},
+ },
+ "microsoft/Comic_Sans_MS.ttf": {
+ {2048, font.HintingNone, [2]rune{'A', 'V'}, 0},
+ },
+ "microsoft/Times_New_Roman.ttf": {
+ {768, font.HintingNone, [2]rune{'A', 'V'}, -99},
+ {768, font.HintingFull, [2]rune{'A', 'V'}, -128},
+ {2048, font.HintingNone, [2]rune{'A', 'A'}, 0},
+ {2048, font.HintingNone, [2]rune{'A', 'T'}, -227},
+ {2048, font.HintingNone, [2]rune{'A', 'V'}, -264},
+ {2048, font.HintingNone, [2]rune{'T', 'A'}, -164},
+ {2048, font.HintingNone, [2]rune{'T', 'T'}, 0},
+ {2048, font.HintingNone, [2]rune{'T', 'V'}, 0},
+ {2048, font.HintingNone, [2]rune{'V', 'A'}, -264},
+ {2048, font.HintingNone, [2]rune{'V', 'T'}, 0},
+ {2048, font.HintingNone, [2]rune{'V', 'V'}, 0},
+ // U+0390 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+ // U+0393 GREEK CAPITAL LETTER GAMMA
+ {2048, font.HintingNone, [2]rune{'\u0390', '\u0393'}, 0},
+ {2048, font.HintingNone, [2]rune{'\u0393', '\u0390'}, 76},
+ },
+ "microsoft/Webdings.ttf": {
+ {2048, font.HintingNone, [2]rune{'\uf041', '\uf042'}, 0},
+ },
+}
diff --git a/vendor/golang.org/x/image/font/sfnt/sfnt.go b/vendor/golang.org/x/image/font/sfnt/sfnt.go
index d4929a838..02efd5f3a 100644
--- a/vendor/golang.org/x/image/font/sfnt/sfnt.go
+++ b/vendor/golang.org/x/image/font/sfnt/sfnt.go
@@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
+//go:generate go run gen.go
+
// Package sfnt implements a decoder for SFNT font file formats, including
// TrueType and OpenType.
package sfnt // import "golang.org/x/image/font/sfnt"
@@ -13,11 +15,15 @@ package sfnt // import "golang.org/x/image/font/sfnt"
//
// The pyftinspect tool from https://github.com/fonttools/fonttools is useful
// for inspecting SFNT fonts.
+//
+// The ttfdump tool is also useful. For example:
+// ttfdump -t cmap ../testdata/CFFTest.otf dump.txt
import (
"errors"
"io"
+ "golang.org/x/image/font"
"golang.org/x/image/math/fixed"
"golang.org/x/text/encoding/charmap"
)
@@ -25,6 +31,20 @@ import (
// These constants are not part of the specifications, but are limitations used
// by this implementation.
const (
+ // This value is arbitrary, but defends against parsing malicious font
+ // files causing excessive memory allocations. For reference, Adobe's
+ // SourceHanSansSC-Regular.otf has 65535 glyphs and:
+ // - its format-4 cmap table has 1581 segments.
+ // - its format-12 cmap table has 16498 segments.
+ //
+ // TODO: eliminate this constraint? If the cmap table is very large, load
+ // some or all of it lazily (at the time Font.GlyphIndex is called) instead
+ // of all of it eagerly (at the time Font.initialize is called), while
+ // keeping an upper bound on the memory used? This will make the code in
+ // cmap.go more complicated, considering that all of the Font methods are
+ // safe to call concurrently, as long as each call has a different *Buffer.
+ maxCmapSegments = 20000
+
maxGlyphDataLength = 64 * 1024
maxHintBits = 256
maxNumTables = 256
@@ -41,27 +61,34 @@ var (
errInvalidBounds = errors.New("sfnt: invalid bounds")
errInvalidCFFTable = errors.New("sfnt: invalid CFF table")
+ errInvalidCmapTable = errors.New("sfnt: invalid cmap table")
errInvalidGlyphData = errors.New("sfnt: invalid glyph data")
errInvalidHeadTable = errors.New("sfnt: invalid head table")
+ errInvalidKernTable = errors.New("sfnt: invalid kern table")
errInvalidLocaTable = errors.New("sfnt: invalid loca table")
errInvalidLocationData = errors.New("sfnt: invalid location data")
errInvalidMaxpTable = errors.New("sfnt: invalid maxp table")
errInvalidNameTable = errors.New("sfnt: invalid name table")
+ errInvalidPostTable = errors.New("sfnt: invalid post table")
errInvalidSourceData = errors.New("sfnt: invalid source data")
errInvalidTableOffset = errors.New("sfnt: invalid table offset")
errInvalidTableTagOrder = errors.New("sfnt: invalid table tag order")
errInvalidUCS2String = errors.New("sfnt: invalid UCS-2 string")
errInvalidVersion = errors.New("sfnt: invalid version")
- errUnsupportedCFFVersion = errors.New("sfnt: unsupported CFF version")
- errUnsupportedCompoundGlyph = errors.New("sfnt: unsupported compound glyph")
- errUnsupportedGlyphDataLength = errors.New("sfnt: unsupported glyph data length")
- errUnsupportedRealNumberEncoding = errors.New("sfnt: unsupported real number encoding")
- errUnsupportedNumberOfHints = errors.New("sfnt: unsupported number of hints")
- errUnsupportedNumberOfTables = errors.New("sfnt: unsupported number of tables")
- errUnsupportedPlatformEncoding = errors.New("sfnt: unsupported platform encoding")
- errUnsupportedTableOffsetLength = errors.New("sfnt: unsupported table offset or length")
- errUnsupportedType2Charstring = errors.New("sfnt: unsupported Type 2 Charstring")
+ errUnsupportedCFFVersion = errors.New("sfnt: unsupported CFF version")
+ errUnsupportedCmapEncodings = errors.New("sfnt: unsupported cmap encodings")
+ errUnsupportedCompoundGlyph = errors.New("sfnt: unsupported compound glyph")
+ errUnsupportedGlyphDataLength = errors.New("sfnt: unsupported glyph data length")
+ errUnsupportedKernTable = errors.New("sfnt: unsupported kern table")
+ errUnsupportedRealNumberEncoding = errors.New("sfnt: unsupported real number encoding")
+ errUnsupportedNumberOfCmapSegments = errors.New("sfnt: unsupported number of cmap segments")
+ errUnsupportedNumberOfHints = errors.New("sfnt: unsupported number of hints")
+ errUnsupportedNumberOfTables = errors.New("sfnt: unsupported number of tables")
+ errUnsupportedPlatformEncoding = errors.New("sfnt: unsupported platform encoding")
+ errUnsupportedPostTable = errors.New("sfnt: unsupported post table")
+ errUnsupportedTableOffsetLength = errors.New("sfnt: unsupported table offset or length")
+ errUnsupportedType2Charstring = errors.New("sfnt: unsupported Type 2 Charstring")
)
// GlyphIndex is a glyph index in a Font.
@@ -107,16 +134,16 @@ const (
// display resolution (DPI) and font size (e.g. a 12 point font).
type Units int32
-// Platform IDs and Platform Specific IDs as per
-// https://www.microsoft.com/typography/otspec/name.htm
-const (
- pidMacintosh = 1
- pidWindows = 3
-
- psidMacintoshRoman = 0
-
- psidWindowsUCS2 = 1
-)
+// scale returns x divided by unitsPerEm, rounded to the nearest fixed.Int26_6
+// value (1/64th of a pixel).
+func scale(x fixed.Int26_6, unitsPerEm Units) fixed.Int26_6 {
+ if x >= 0 {
+ x += fixed.Int26_6(unitsPerEm) / 2
+ } else {
+ x -= fixed.Int26_6(unitsPerEm) / 2
+ }
+ return x / fixed.Int26_6(unitsPerEm)
+}
func u16(b []byte) uint16 {
_ = b[1] // Bounds check hint to compiler.
@@ -208,6 +235,20 @@ func (s *source) u16(buf []byte, t table, i int) (uint16, error) {
return u16(buf), nil
}
+// u32 returns the uint32 in the table t at the relative offset i.
+//
+// buf is an optional scratch buffer as per the source.view method.
+func (s *source) u32(buf []byte, t table, i int) (uint32, error) {
+ if i < 0 || uint(t.length) < uint(i+4) {
+ return 0, errInvalidBounds
+ }
+ buf, err := s.view(buf, int(t.offset)+i, 4)
+ if err != nil {
+ return 0, err
+ }
+ return u32(buf), nil
+}
+
// table is a section of the font data.
type table struct {
offset, length uint32
@@ -247,6 +288,18 @@ func ParseReaderAt(src io.ReaderAt) (*Font, error) {
//
// The Font methods that don't take a *Buffer argument are always safe to call
// concurrently.
+//
+// Some methods provide lengths or coordinates, e.g. bounds, font metrics and
+// control points. All of these methods take a ppem parameter, which is the
+// number of pixels in 1 em, expressed as a 26.6 fixed point value. For
+// example, if 1 em is 10 pixels then ppem is fixed.I(10), which equals
+// fixed.Int26_6(10 << 6).
+//
+// To get those lengths or coordinates in terms of font units instead of
+// pixels, use ppem = fixed.Int26_6(f.UnitsPerEm()) and if those methods take a
+// font.Hinting parameter, use font.HintingNone. The return values will have
+// type fixed.Int26_6, but those numbers can be converted back to Units with no
+// further scaling necessary.
type Font struct {
src source
@@ -283,11 +336,16 @@ type Font struct {
// https://www.microsoft.com/typography/otspec/otff.htm#otttables
// "Other OpenType Tables".
//
- // TODO: hdmx, kern, vmtx? Others?
+ // TODO: hdmx, vmtx? Others?
+ kern table
cached struct {
+ glyphIndex glyphIndexFunc
indexToLocFormat bool // false means short, true means long.
isPostScript bool
+ kernNumPairs int32
+ kernOffset int32
+ postTableVersion uint32
unitsPerEm Units
// The glyph data for the glyph index i is in
@@ -306,51 +364,96 @@ func (f *Font) initialize() error {
if !f.src.valid() {
return errInvalidSourceData
}
- var buf []byte
+ buf, isPostScript, err := f.initializeTables(nil)
+ if err != nil {
+ return err
+ }
+ // The order of these parseXxx calls matters. Later calls may depend on
+ // information parsed by earlier calls, such as the maxp table's numGlyphs.
+ // To enforce these dependencies, such information is passed and returned
+ // explicitly, and the f.cached fields are only set afterwards.
+ //
+ // When implementing new parseXxx methods, take care not to call methods
+ // such as Font.NumGlyphs that implicitly depend on f.cached fields.
+
+ buf, indexToLocFormat, unitsPerEm, err := f.parseHead(buf)
+ if err != nil {
+ return err
+ }
+ buf, numGlyphs, locations, err := f.parseMaxp(buf, indexToLocFormat, isPostScript)
+ if err != nil {
+ return err
+ }
+ buf, glyphIndex, err := f.parseCmap(buf)
+ if err != nil {
+ return err
+ }
+ buf, kernNumPairs, kernOffset, err := f.parseKern(buf)
+ if err != nil {
+ return err
+ }
+ buf, postTableVersion, err := f.parsePost(buf, numGlyphs)
+ if err != nil {
+ return err
+ }
+
+ f.cached.glyphIndex = glyphIndex
+ f.cached.indexToLocFormat = indexToLocFormat
+ f.cached.isPostScript = isPostScript
+ f.cached.kernNumPairs = kernNumPairs
+ f.cached.kernOffset = kernOffset
+ f.cached.postTableVersion = postTableVersion
+ f.cached.unitsPerEm = unitsPerEm
+ f.cached.locations = locations
+
+ return nil
+}
+
+func (f *Font) initializeTables(buf []byte) (buf1 []byte, isPostScript bool, err error) {
// https://www.microsoft.com/typography/otspec/otff.htm "Organization of an
// OpenType Font" says that "The OpenType font starts with the Offset
// Table", which is 12 bytes.
- buf, err := f.src.view(buf, 0, 12)
+ buf, err = f.src.view(buf, 0, 12)
if err != nil {
- return err
+ return nil, false, err
}
switch u32(buf) {
default:
- return errInvalidVersion
+ return nil, false, errInvalidVersion
case 0x00010000:
// No-op.
case 0x4f54544f: // "OTTO".
- f.cached.isPostScript = true
+ isPostScript = true
}
numTables := int(u16(buf[4:]))
if numTables > maxNumTables {
- return errUnsupportedNumberOfTables
+ return nil, false, errUnsupportedNumberOfTables
}
// "The Offset Table is followed immediately by the Table Record entries...
// sorted in ascending order by tag", 16 bytes each.
buf, err = f.src.view(buf, 12, 16*numTables)
if err != nil {
- return err
+ return nil, false, err
}
for b, first, prevTag := buf, true, uint32(0); len(b) > 0; b = b[16:] {
tag := u32(b)
if first {
first = false
} else if tag <= prevTag {
- return errInvalidTableTagOrder
+ return nil, false, errInvalidTableTagOrder
}
prevTag = tag
o, n := u32(b[8:12]), u32(b[12:16])
if o > maxTableOffset || n > maxTableLength {
- return errUnsupportedTableOffsetLength
+ return nil, false, errUnsupportedTableOffsetLength
}
// We ignore the checksums, but "all tables must begin on four byte
// boundries [sic]".
if o&3 != 0 {
- return errInvalidTableOffset
+ return nil, false, errInvalidTableOffset
}
// Match the 4-byte tag as a uint32. For example, "OS/2" is 0x4f532f32.
@@ -369,6 +472,8 @@ func (f *Font) initialize() error {
f.hhea = table{o, n}
case 0x686d7478:
f.hmtx = table{o, n}
+ case 0x6b65726e:
+ f.kern = table{o, n}
case 0x6c6f6361:
f.loca = table{o, n}
case 0x6d617870:
@@ -379,69 +484,258 @@ func (f *Font) initialize() error {
f.post = table{o, n}
}
}
+ return buf, isPostScript, nil
+}
- var u uint16
+func (f *Font) parseCmap(buf []byte) (buf1 []byte, glyphIndex glyphIndexFunc, err error) {
+ // https://www.microsoft.com/typography/OTSPEC/cmap.htm
+ const headerSize, entrySize = 4, 8
+ if f.cmap.length < headerSize {
+ return nil, nil, errInvalidCmapTable
+ }
+ u, err := f.src.u16(buf, f.cmap, 2)
+ if err != nil {
+ return nil, nil, err
+ }
+ numSubtables := int(u)
+ if f.cmap.length < headerSize+entrySize*uint32(numSubtables) {
+ return nil, nil, errInvalidCmapTable
+ }
+
+ var (
+ bestWidth int
+ bestOffset uint32
+ bestLength uint32
+ bestFormat uint16
+ )
+
+ // Scan all of the subtables, picking the widest supported one. See the
+ // platformEncodingWidth comment for more discussion of width.
+ for i := 0; i < numSubtables; i++ {
+ buf, err = f.src.view(buf, int(f.cmap.offset)+headerSize+entrySize*i, entrySize)
+ if err != nil {
+ return nil, nil, err
+ }
+ pid := u16(buf)
+ psid := u16(buf[2:])
+ width := platformEncodingWidth(pid, psid)
+ if width <= bestWidth {
+ continue
+ }
+ offset := u32(buf[4:])
+
+ if offset > f.cmap.length-4 {
+ return nil, nil, errInvalidCmapTable
+ }
+ buf, err = f.src.view(buf, int(f.cmap.offset+offset), 4)
+ if err != nil {
+ return nil, nil, err
+ }
+ format := u16(buf)
+ if !supportedCmapFormat(format, pid, psid) {
+ continue
+ }
+ length := uint32(u16(buf[2:]))
+
+ bestWidth = width
+ bestOffset = offset
+ bestLength = length
+ bestFormat = format
+ }
+
+ if bestWidth == 0 {
+ return nil, nil, errUnsupportedCmapEncodings
+ }
+ return f.makeCachedGlyphIndex(buf, bestOffset, bestLength, bestFormat)
+}
+
+func (f *Font) parseHead(buf []byte) (buf1 []byte, indexToLocFormat bool, unitsPerEm Units, err error) {
// https://www.microsoft.com/typography/otspec/head.htm
+
if f.head.length != 54 {
- return errInvalidHeadTable
+ return nil, false, 0, errInvalidHeadTable
}
- u, err = f.src.u16(buf, f.head, 18)
+ u, err := f.src.u16(buf, f.head, 18)
if err != nil {
- return err
+ return nil, false, 0, err
}
if u == 0 {
- return errInvalidHeadTable
+ return nil, false, 0, errInvalidHeadTable
}
- f.cached.unitsPerEm = Units(u)
+ unitsPerEm = Units(u)
u, err = f.src.u16(buf, f.head, 50)
if err != nil {
- return err
+ return nil, false, 0, err
+ }
+ indexToLocFormat = u != 0
+ return buf, indexToLocFormat, unitsPerEm, nil
+}
+
+func (f *Font) parseKern(buf []byte) (buf1 []byte, kernNumPairs, kernOffset int32, err error) {
+ // https://www.microsoft.com/typography/otspec/kern.htm
+
+ if f.kern.length == 0 {
+ return buf, 0, 0, nil
+ }
+ const headerSize = 4
+ if f.kern.length < headerSize {
+ return nil, 0, 0, errInvalidKernTable
+ }
+ buf, err = f.src.view(buf, int(f.kern.offset), headerSize)
+ if err != nil {
+ return nil, 0, 0, err
+ }
+ offset := int(f.kern.offset) + headerSize
+ length := int(f.kern.length) - headerSize
+
+ switch version := u16(buf); version {
+ case 0:
+ // TODO: support numTables != 1. Testing that requires finding such a font.
+ if numTables := int(u16(buf[2:])); numTables != 1 {
+ return nil, 0, 0, errUnsupportedKernTable
+ }
+ return f.parseKernVersion0(buf, offset, length)
+ case 1:
+ // TODO: find such a (proprietary?) font, and support it. Both of
+ // https://www.microsoft.com/typography/otspec/kern.htm
+ // https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6kern.html
+ // say that such fonts work on Mac OS but not on Windows.
+ }
+ return nil, 0, 0, errUnsupportedKernTable
+}
+
+func (f *Font) parseKernVersion0(buf []byte, offset, length int) (buf1 []byte, kernNumPairs, kernOffset int32, err error) {
+ const headerSize = 6
+ if length < headerSize {
+ return nil, 0, 0, errInvalidKernTable
+ }
+ buf, err = f.src.view(buf, offset, headerSize)
+ if err != nil {
+ return nil, 0, 0, err
}
- f.cached.indexToLocFormat = u != 0
+ if version := u16(buf); version != 0 {
+ return nil, 0, 0, errUnsupportedKernTable
+ }
+ subtableLength := int(u16(buf[2:]))
+ if subtableLength < headerSize || length < subtableLength {
+ return nil, 0, 0, errInvalidKernTable
+ }
+ if coverageBits := buf[5]; coverageBits != 0x01 {
+ // We only support horizontal kerning.
+ return nil, 0, 0, errUnsupportedKernTable
+ }
+ offset += headerSize
+ length -= headerSize
+ subtableLength -= headerSize
+
+ switch format := buf[4]; format {
+ case 0:
+ return f.parseKernFormat0(buf, offset, subtableLength)
+ case 2:
+ // TODO: find such a (proprietary?) font, and support it.
+ }
+ return nil, 0, 0, errUnsupportedKernTable
+}
+func (f *Font) parseKernFormat0(buf []byte, offset, length int) (buf1 []byte, kernNumPairs, kernOffset int32, err error) {
+ const headerSize, entrySize = 8, 6
+ if length < headerSize {
+ return nil, 0, 0, errInvalidKernTable
+ }
+ buf, err = f.src.view(buf, offset, headerSize)
+ if err != nil {
+ return nil, 0, 0, err
+ }
+ kernNumPairs = int32(u16(buf))
+ if length != headerSize+entrySize*int(kernNumPairs) {
+ return nil, 0, 0, errInvalidKernTable
+ }
+ return buf, kernNumPairs, int32(offset) + headerSize, nil
+}
+
+func (f *Font) parseMaxp(buf []byte, indexToLocFormat, isPostScript bool) (buf1 []byte, numGlyphs int, locations []uint32, err error) {
// https://www.microsoft.com/typography/otspec/maxp.htm
- if f.cached.isPostScript {
+
+ if isPostScript {
if f.maxp.length != 6 {
- return errInvalidMaxpTable
+ return nil, 0, nil, errInvalidMaxpTable
}
} else {
if f.maxp.length != 32 {
- return errInvalidMaxpTable
+ return nil, 0, nil, errInvalidMaxpTable
}
}
- u, err = f.src.u16(buf, f.maxp, 4)
+ u, err := f.src.u16(buf, f.maxp, 4)
if err != nil {
- return err
+ return nil, 0, nil, err
}
- numGlyphs := int(u)
+ numGlyphs = int(u)
- if f.cached.isPostScript {
+ if isPostScript {
p := cffParser{
src: &f.src,
base: int(f.cff.offset),
offset: int(f.cff.offset),
end: int(f.cff.offset + f.cff.length),
}
- f.cached.locations, err = p.parse()
+ locations, err = p.parse()
if err != nil {
- return err
+ return nil, 0, nil, err
}
} else {
- f.cached.locations, err = parseLoca(
- &f.src, f.loca, f.glyf.offset, f.cached.indexToLocFormat, numGlyphs)
+ locations, err = parseLoca(&f.src, f.loca, f.glyf.offset, indexToLocFormat, numGlyphs)
if err != nil {
- return err
+ return nil, 0, nil, err
}
}
- if len(f.cached.locations) != numGlyphs+1 {
- return errInvalidLocationData
+ if len(locations) != numGlyphs+1 {
+ return nil, 0, nil, errInvalidLocationData
}
- return nil
+
+ return buf, numGlyphs, locations, nil
}
-// TODO: func (f *Font) GlyphIndex(r rune) (x GlyphIndex, ok bool)
-// This will require parsing the cmap table.
+func (f *Font) parsePost(buf []byte, numGlyphs int) (buf1 []byte, postTableVersion uint32, err error) {
+ // https://www.microsoft.com/typography/otspec/post.htm
+
+ const headerSize = 32
+ if f.post.length < headerSize {
+ return nil, 0, errInvalidPostTable
+ }
+ u, err := f.src.u32(buf, f.post, 0)
+ if err != nil {
+ return nil, 0, err
+ }
+ switch u {
+ case 0x20000:
+ if f.post.length < headerSize+2+2*uint32(numGlyphs) {
+ return nil, 0, errInvalidPostTable
+ }
+ case 0x30000:
+ // No-op.
+ default:
+ return nil, 0, errUnsupportedPostTable
+ }
+ return buf, u, nil
+}
+
+// TODO: API for looking up glyph variants?? For example, some fonts may
+// provide both slashed and dotted zero glyphs ('0'), or regular and 'old
+// style' numerals, and users can direct software to choose a variant.
+
+type glyphIndexFunc func(f *Font, b *Buffer, r rune) (GlyphIndex, error)
+
+// GlyphIndex returns the glyph index for the given rune.
+//
+// It returns (0, nil) if there is no glyph for r.
+// https://www.microsoft.com/typography/OTSPEC/cmap.htm says that "Character
+// codes that do not correspond to any glyph in the font should be mapped to
+// glyph index 0. The glyph at this location must be a special glyph
+// representing a missing character, commonly known as .notdef."
+func (f *Font) GlyphIndex(b *Buffer, r rune) (GlyphIndex, error) {
+ return f.cached.glyphIndex(f, b, r)
+}
func (f *Font) viewGlyphData(b *Buffer, x GlyphIndex) ([]byte, error) {
xx := int(x)
@@ -458,15 +752,16 @@ func (f *Font) viewGlyphData(b *Buffer, x GlyphIndex) ([]byte, error) {
// LoadGlyphOptions are the options to the Font.LoadGlyph method.
type LoadGlyphOptions struct {
- // TODO: scale / transform / hinting.
+ // TODO: transform / hinting.
}
-// LoadGlyph returns the vector segments for the x'th glyph.
+// LoadGlyph returns the vector segments for the x'th glyph. ppem is the number
+// of pixels in 1 em.
//
// If b is non-nil, the segments become invalid to use once b is re-used.
//
// It returns ErrNotFound if the glyph index is out of range.
-func (f *Font) LoadGlyph(b *Buffer, x GlyphIndex, opts *LoadGlyphOptions) ([]Segment, error) {
+func (f *Font) LoadGlyph(b *Buffer, x GlyphIndex, ppem fixed.Int26_6, opts *LoadGlyphOptions) ([]Segment, error) {
if b == nil {
b = &Buffer{}
}
@@ -491,11 +786,153 @@ func (f *Font) LoadGlyph(b *Buffer, x GlyphIndex, opts *LoadGlyphOptions) ([]Seg
b.segments = segments
}
- // TODO: look at opts to scale / transform / hint the Buffer.segments.
+ // Scale the segments. If we want to support hinting, we'll have to push
+ // the scaling computation into the PostScript / TrueType specific glyph
+ // loading code, such as the appendGlyfSegments body, since TrueType
+ // hinting bytecode works on the scaled glyph vectors. For now, though,
+ // it's simpler to scale as a post-processing step.
+ for i := range b.segments {
+ s := &b.segments[i]
+ for j := range s.Args {
+ s.Args[j] = scale(s.Args[j]*ppem, f.cached.unitsPerEm)
+ }
+ }
+
+ // TODO: look at opts to transform / hint the Buffer.segments.
return b.segments, nil
}
+// GlyphName returns the name of the x'th glyph.
+//
+// Not every font contains glyph names. If not present, GlyphName will return
+// ("", nil).
+//
+// If present, the glyph name, provided by the font, is assumed to follow the
+// Adobe Glyph List Specification:
+// https://github.com/adobe-type-tools/agl-specification/blob/master/README.md
+//
+// This is also known as the "Adobe Glyph Naming convention", the "Adobe
+// document [for] Unicode and Glyph Names" or "PostScript glyph names".
+//
+// It returns ErrNotFound if the glyph index is out of range.
+func (f *Font) GlyphName(b *Buffer, x GlyphIndex) (string, error) {
+ if int(x) >= f.NumGlyphs() {
+ return "", ErrNotFound
+ }
+ if f.cached.postTableVersion != 0x20000 {
+ return "", nil
+ }
+ if b == nil {
+ b = &Buffer{}
+ }
+
+ // The wire format for a Version 2 post table is documented at:
+ // https://www.microsoft.com/typography/otspec/post.htm
+ const glyphNameIndexOffset = 34
+
+ buf, err := b.view(&f.src, int(f.post.offset)+glyphNameIndexOffset+2*int(x), 2)
+ if err != nil {
+ return "", err
+ }
+ u := u16(buf)
+ if u < numBuiltInPostNames {
+ i := builtInPostNamesOffsets[u+0]
+ j := builtInPostNamesOffsets[u+1]
+ return builtInPostNamesData[i:j], nil
+ }
+ // https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6post.html
+ // says that "32768 through 65535 are reserved for future use".
+ if u > 32767 {
+ return "", errUnsupportedPostTable
+ }
+ u -= numBuiltInPostNames
+
+ // Iterate through the list of Pascal-formatted strings. A linear scan is
+ // clearly O(u), which isn't great (as the obvious loop, calling
+ // Font.GlyphName, to get all of the glyph names in a font has quadratic
+ // complexity), but the wire format doesn't suggest a better alternative.
+
+ offset := glyphNameIndexOffset + 2*f.NumGlyphs()
+ buf, err = b.view(&f.src, int(f.post.offset)+offset, int(f.post.length)-offset)
+ if err != nil {
+ return "", err
+ }
+
+ for {
+ if len(buf) == 0 {
+ return "", errInvalidPostTable
+ }
+ n := 1 + int(buf[0])
+ if len(buf) < n {
+ return "", errInvalidPostTable
+ }
+ if u == 0 {
+ return string(buf[1:n]), nil
+ }
+ buf = buf[n:]
+ u--
+ }
+}
+
+// Kern returns the horizontal adjustment for the kerning pair (x0, x1). A
+// positive kern means to move the glyphs further apart. ppem is the number of
+// pixels in 1 em.
+//
+// It returns ErrNotFound if either glyph index is out of range.
+func (f *Font) Kern(b *Buffer, x0, x1 GlyphIndex, ppem fixed.Int26_6, h font.Hinting) (fixed.Int26_6, error) {
+ // TODO: how should this work with the GPOS table and CFF fonts?
+ // https://www.microsoft.com/typography/otspec/kern.htm says that
+ // "OpenType™ fonts containing CFF outlines are not supported by the 'kern'
+ // table and must use the 'GPOS' OpenType Layout table."
+
+ if n := f.NumGlyphs(); int(x0) >= n || int(x1) >= n {
+ return 0, ErrNotFound
+ }
+ // Not every font has a kern table. If it doesn't, there's no need to
+ // allocate a Buffer.
+ if f.kern.length == 0 {
+ return 0, nil
+ }
+ if b == nil {
+ b = &Buffer{}
+ }
+
+ key := uint32(x0)<<16 | uint32(x1)
+ lo, hi := int32(0), f.cached.kernNumPairs
+ for lo < hi {
+ i := (lo + hi) / 2
+
+ // TODO: this view call inside the inner loop can lead to many small
+ // reads instead of fewer larger reads, which can be expensive. We
+ // should be able to do better, although we don't want to make (one)
+ // arbitrarily large read. Perhaps we should round up reads to 4K or 8K
+ // chunks. For reference, Arial.ttf's kern table is 5472 bytes.
+ // Times_New_Roman.ttf's kern table is 5220 bytes.
+ const entrySize = 6
+ buf, err := b.view(&f.src, int(f.cached.kernOffset+i*entrySize), entrySize)
+ if err != nil {
+ return 0, err
+ }
+
+ k := u32(buf)
+ if k < key {
+ lo = i + 1
+ } else if k > key {
+ hi = i
+ } else {
+ kern := fixed.Int26_6(int16(u16(buf[4:])))
+ kern = scale(kern*ppem, f.cached.unitsPerEm)
+ if h == font.HintingFull {
+ // Quantize the fixed.Int26_6 value to the nearest pixel.
+ kern = (kern + 32) &^ 63
+ }
+ return kern, nil
+ }
+ }
+ return 0, nil
+}
+
// Name returns the name value keyed by the given NameID.
//
// It returns ErrNotFound if there is no value for that key.
@@ -512,14 +949,14 @@ func (f *Font) Name(b *Buffer, id NameID) (string, error) {
if err != nil {
return "", err
}
- nSubtables := u16(buf[2:])
- if f.name.length < headerSize+entrySize*uint32(nSubtables) {
+ numSubtables := u16(buf[2:])
+ if f.name.length < headerSize+entrySize*uint32(numSubtables) {
return "", errInvalidNameTable
}
stringOffset := u16(buf[4:])
seen := false
- for i, n := 0, int(nSubtables); i < n; i++ {
+ for i, n := 0, int(numSubtables); i < n; i++ {
buf, err := b.view(&f.src, int(f.name.offset)+headerSize+entrySize*i, entrySize)
if err != nil {
return "", err
diff --git a/vendor/golang.org/x/image/font/sfnt/sfnt_test.go b/vendor/golang.org/x/image/font/sfnt/sfnt_test.go
index 4ffd72f40..85d96a96f 100644
--- a/vendor/golang.org/x/image/font/sfnt/sfnt_test.go
+++ b/vendor/golang.org/x/image/font/sfnt/sfnt_test.go
@@ -6,6 +6,7 @@ package sfnt
import (
"bytes"
+ "fmt"
"io/ioutil"
"path/filepath"
"testing"
@@ -14,52 +15,48 @@ import (
"golang.org/x/image/math/fixed"
)
-func moveTo(xa, ya int) Segment {
+func moveTo(xa, ya fixed.Int26_6) Segment {
return Segment{
- Op: SegmentOpMoveTo,
- Args: [6]fixed.Int26_6{
- 0: fixed.I(xa),
- 1: fixed.I(ya),
- },
+ Op: SegmentOpMoveTo,
+ Args: [6]fixed.Int26_6{xa, ya},
}
}
-func lineTo(xa, ya int) Segment {
+func lineTo(xa, ya fixed.Int26_6) Segment {
return Segment{
- Op: SegmentOpLineTo,
- Args: [6]fixed.Int26_6{
- 0: fixed.I(xa),
- 1: fixed.I(ya),
- },
+ Op: SegmentOpLineTo,
+ Args: [6]fixed.Int26_6{xa, ya},
}
}
-func quadTo(xa, ya, xb, yb int) Segment {
+func quadTo(xa, ya, xb, yb fixed.Int26_6) Segment {
return Segment{
- Op: SegmentOpQuadTo,
- Args: [6]fixed.Int26_6{
- 0: fixed.I(xa),
- 1: fixed.I(ya),
- 2: fixed.I(xb),
- 3: fixed.I(yb),
- },
+ Op: SegmentOpQuadTo,
+ Args: [6]fixed.Int26_6{xa, ya, xb, yb},
}
}
-func cubeTo(xa, ya, xb, yb, xc, yc int) Segment {
+func cubeTo(xa, ya, xb, yb, xc, yc fixed.Int26_6) Segment {
return Segment{
- Op: SegmentOpCubeTo,
- Args: [6]fixed.Int26_6{
- 0: fixed.I(xa),
- 1: fixed.I(ya),
- 2: fixed.I(xb),
- 3: fixed.I(yb),
- 4: fixed.I(xc),
- 5: fixed.I(yc),
- },
+ Op: SegmentOpCubeTo,
+ Args: [6]fixed.Int26_6{xa, ya, xb, yb, xc, yc},
}
}
+func checkSegmentsEqual(got, want []Segment) error {
+ if len(got) != len(want) {
+ return fmt.Errorf("got %d elements, want %d\noverall:\ngot %v\nwant %v",
+ len(got), len(want), got, want)
+ }
+ for i, g := range got {
+ if w := want[i]; g != w {
+ return fmt.Errorf("element %d:\ngot %v\nwant %v\noverall:\ngot %v\nwant %v",
+ i, g, w, got, want)
+ }
+ }
+ return nil
+}
+
func TestTrueTypeParse(t *testing.T) {
f, err := Parse(goregular.TTF)
if err != nil {
@@ -88,6 +85,167 @@ func testTrueType(t *testing.T, f *Font) {
}
}
+func TestGoRegularGlyphIndex(t *testing.T) {
+ f, err := Parse(goregular.TTF)
+ if err != nil {
+ t.Fatalf("Parse: %v", err)
+ }
+
+ testCases := []struct {
+ r rune
+ want GlyphIndex
+ }{
+ // Glyphs that aren't present in Go Regular.
+ {'\u001f', 0}, // U+001F <control>
+ {'\u0200', 0}, // U+0200 LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
+ {'\u2000', 0}, // U+2000 EN QUAD
+
+ // The want values below can be verified by running the ttx tool on
+ // Go-Regular.ttf.
+ //
+ // The actual values are ad hoc, and result from whatever tools the
+ // Bigelow & Holmes type foundry used and the order in which they
+ // crafted the glyphs. They may change over time as newer versions of
+ // the font are released. In practice, though, running this test with
+ // coverage analysis suggests that it covers both the zero and non-zero
+ // cmapEntry16.offset cases for a format-4 cmap table.
+
+ {'\u0020', 3}, // U+0020 SPACE
+ {'\u0021', 4}, // U+0021 EXCLAMATION MARK
+ {'\u0022', 5}, // U+0022 QUOTATION MARK
+ {'\u0023', 6}, // U+0023 NUMBER SIGN
+ {'\u0024', 223}, // U+0024 DOLLAR SIGN
+ {'\u0025', 7}, // U+0025 PERCENT SIGN
+ {'\u0026', 8}, // U+0026 AMPERSAND
+ {'\u0027', 9}, // U+0027 APOSTROPHE
+
+ {'\u03bd', 423}, // U+03BD GREEK SMALL LETTER NU
+ {'\u03be', 424}, // U+03BE GREEK SMALL LETTER XI
+ {'\u03bf', 438}, // U+03BF GREEK SMALL LETTER OMICRON
+ {'\u03c0', 208}, // U+03C0 GREEK SMALL LETTER PI
+ {'\u03c1', 425}, // U+03C1 GREEK SMALL LETTER RHO
+ {'\u03c2', 426}, // U+03C2 GREEK SMALL LETTER FINAL SIGMA
+ }
+
+ var b Buffer
+ for _, tc := range testCases {
+ got, err := f.GlyphIndex(&b, tc.r)
+ if err != nil {
+ t.Errorf("r=%q: %v", tc.r, err)
+ continue
+ }
+ if got != tc.want {
+ t.Errorf("r=%q: got %d, want %d", tc.r, got, tc.want)
+ continue
+ }
+ }
+}
+
+func TestGlyphIndex(t *testing.T) {
+ data, err := ioutil.ReadFile(filepath.FromSlash("../testdata/cmapTest.ttf"))
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ for _, format := range []int{-1, 0, 4, 12} {
+ testGlyphIndex(t, data, format)
+ }
+}
+
+func testGlyphIndex(t *testing.T, data []byte, cmapFormat int) {
+ if cmapFormat >= 0 {
+ originalSupportedCmapFormat := supportedCmapFormat
+ defer func() {
+ supportedCmapFormat = originalSupportedCmapFormat
+ }()
+ supportedCmapFormat = func(format, pid, psid uint16) bool {
+ return int(format) == cmapFormat && originalSupportedCmapFormat(format, pid, psid)
+ }
+ }
+
+ f, err := Parse(data)
+ if err != nil {
+ t.Errorf("cmapFormat=%d: %v", cmapFormat, err)
+ return
+ }
+
+ testCases := []struct {
+ r rune
+ want GlyphIndex
+ }{
+ // Glyphs that aren't present in cmapTest.ttf.
+ {'?', 0},
+ {'\ufffd', 0},
+ {'\U0001f4a9', 0},
+
+ // For a .TTF file, FontForge maps:
+ // - ".notdef" to glyph index 0.
+ // - ".null" to glyph index 1.
+ // - "nonmarkingreturn" to glyph index 2.
+
+ {'/', 0},
+ {'0', 3},
+ {'1', 4},
+ {'2', 5},
+ {'3', 0},
+
+ {'@', 0},
+ {'A', 6},
+ {'B', 7},
+ {'C', 0},
+
+ {'`', 0},
+ {'a', 8},
+ {'b', 0},
+
+ // Of the remaining runes, only U+00FF LATIN SMALL LETTER Y WITH
+ // DIAERESIS is in both the Mac Roman encoding and the cmapTest.ttf
+ // font file.
+ {'\u00fe', 0},
+ {'\u00ff', 9},
+ {'\u0100', 10},
+ {'\u0101', 11},
+ {'\u0102', 0},
+
+ {'\u4e2c', 0},
+ {'\u4e2d', 12},
+ {'\u4e2e', 0},
+
+ {'\U0001f0a0', 0},
+ {'\U0001f0a1', 13},
+ {'\U0001f0a2', 0},
+
+ {'\U0001f0b0', 0},
+ {'\U0001f0b1', 14},
+ {'\U0001f0b2', 15},
+ {'\U0001f0b3', 0},
+ }
+
+ var b Buffer
+ for _, tc := range testCases {
+ want := tc.want
+ switch {
+ case cmapFormat == 0 && tc.r > '\u007f' && tc.r != '\u00ff':
+ // cmap format 0, with the Macintosh Roman encoding, can only
+ // represent a limited set of non-ASCII runes, e.g. U+00FF.
+ want = 0
+ case cmapFormat == 4 && tc.r > '\uffff':
+ // cmap format 4 only supports the Basic Multilingual Plane (BMP).
+ want = 0
+ }
+
+ got, err := f.GlyphIndex(&b, tc.r)
+ if err != nil {
+ t.Errorf("cmapFormat=%d, r=%q: %v", cmapFormat, tc.r, err)
+ continue
+ }
+ if got != want {
+ t.Errorf("cmapFormat=%d, r=%q: got %d, want %d", cmapFormat, tc.r, got, want)
+ continue
+ }
+ }
+}
+
func TestPostScriptSegments(t *testing.T) {
// wants' vectors correspond 1-to-1 to what's in the CFFTest.sfd file,
// although OpenType/CFF and FontForge's SFD have reversed orders.
@@ -226,40 +384,32 @@ func TestTrueTypeSegments(t *testing.T) {
}
func testSegments(t *testing.T, filename string, wants [][]Segment) {
- data, err := ioutil.ReadFile(filepath.Join("..", "testdata", filename))
+ data, err := ioutil.ReadFile(filepath.FromSlash("../testdata/" + filename))
if err != nil {
- t.Fatal(err)
+ t.Fatalf("ReadFile: %v", err)
}
f, err := Parse(data)
if err != nil {
- t.Fatal(err)
+ t.Fatalf("Parse: %v", err)
}
+ ppem := fixed.Int26_6(f.UnitsPerEm())
if ng := f.NumGlyphs(); ng != len(wants) {
t.Fatalf("NumGlyphs: got %d, want %d", ng, len(wants))
}
var b Buffer
-loop:
for i, want := range wants {
- got, err := f.LoadGlyph(&b, GlyphIndex(i), nil)
+ got, err := f.LoadGlyph(&b, GlyphIndex(i), ppem, nil)
if err != nil {
t.Errorf("i=%d: LoadGlyph: %v", i, err)
continue
}
- if len(got) != len(want) {
- t.Errorf("i=%d: got %d elements, want %d\noverall:\ngot %v\nwant %v",
- i, len(got), len(want), got, want)
+ if err := checkSegmentsEqual(got, want); err != nil {
+ t.Errorf("i=%d: %v", i, err)
continue
}
- for j, g := range got {
- if w := want[j]; g != w {
- t.Errorf("i=%d: element %d:\ngot %v\nwant %v\noverall:\ngot %v\nwant %v",
- i, j, g, w, got, want)
- continue loop
- }
- }
}
- if _, err := f.LoadGlyph(nil, 0xffff, nil); err != ErrNotFound {
+ if _, err := f.LoadGlyph(nil, 0xffff, ppem, nil); err != ErrNotFound {
t.Errorf("LoadGlyph(..., 0xffff, ...):\ngot %v\nwant %v", err, ErrNotFound)
}
@@ -270,3 +420,131 @@ loop:
t.Errorf("Name:\ngot %q\nwant %q", name, want)
}
}
+
+func TestPPEM(t *testing.T) {
+ data, err := ioutil.ReadFile(filepath.FromSlash("../testdata/glyfTest.ttf"))
+ if err != nil {
+ t.Fatalf("ReadFile: %v", err)
+ }
+ f, err := Parse(data)
+ if err != nil {
+ t.Fatalf("Parse: %v", err)
+ }
+ var b Buffer
+ x, err := f.GlyphIndex(&b, '1')
+ if err != nil {
+ t.Fatalf("GlyphIndex: %v", err)
+ }
+ if x == 0 {
+ t.Fatalf("GlyphIndex: no glyph index found for the rune '1'")
+ }
+
+ testCases := []struct {
+ ppem fixed.Int26_6
+ want []Segment
+ }{{
+ ppem: fixed.Int26_6(12 << 6),
+ want: []Segment{
+ moveTo(77, 0),
+ lineTo(77, 614),
+ lineTo(230, 614),
+ lineTo(230, 0),
+ lineTo(77, 0),
+ },
+ }, {
+ ppem: fixed.Int26_6(2048),
+ want: []Segment{
+ moveTo(205, 0),
+ lineTo(205, 1638),
+ lineTo(614, 1638),
+ lineTo(614, 0),
+ lineTo(205, 0),
+ },
+ }}
+
+ for i, tc := range testCases {
+ got, err := f.LoadGlyph(&b, x, tc.ppem, nil)
+ if err != nil {
+ t.Errorf("i=%d: LoadGlyph: %v", i, err)
+ continue
+ }
+ if err := checkSegmentsEqual(got, tc.want); err != nil {
+ t.Errorf("i=%d: %v", i, err)
+ continue
+ }
+ }
+}
+
+func TestGlyphName(t *testing.T) {
+ f, err := Parse(goregular.TTF)
+ if err != nil {
+ t.Fatalf("Parse: %v", err)
+ }
+
+ testCases := []struct {
+ r rune
+ want string
+ }{
+ {'\x00', "NULL"},
+ {'!', "exclam"},
+ {'A', "A"},
+ {'{', "braceleft"},
+ {'\u00c4', "Adieresis"}, // U+00C4 LATIN CAPITAL LETTER A WITH DIAERESIS
+ {'\u2020', "dagger"}, // U+2020 DAGGER
+ {'\u2660', "spade"}, // U+2660 BLACK SPADE SUIT
+ {'\uf800', "gopher"}, // U+F800 <Private Use>
+ {'\ufffe', ".notdef"}, // Not in the Go Regular font, so GlyphIndex returns (0, nil).
+ }
+
+ var b Buffer
+ for _, tc := range testCases {
+ x, err := f.GlyphIndex(&b, tc.r)
+ if err != nil {
+ t.Errorf("r=%q: GlyphIndex: %v", tc.r, err)
+ continue
+ }
+ got, err := f.GlyphName(&b, x)
+ if err != nil {
+ t.Errorf("r=%q: GlyphName: %v", tc.r, err)
+ continue
+ }
+ if got != tc.want {
+ t.Errorf("r=%q: got %q, want %q", tc.r, got, tc.want)
+ continue
+ }
+ }
+}
+
+func TestBuiltInPostNames(t *testing.T) {
+ testCases := []struct {
+ x GlyphIndex
+ want string
+ }{
+ {0, ".notdef"},
+ {1, ".null"},
+ {2, "nonmarkingreturn"},
+ {13, "asterisk"},
+ {36, "A"},
+ {93, "z"},
+ {123, "ocircumflex"},
+ {202, "Edieresis"},
+ {255, "Ccaron"},
+ {256, "ccaron"},
+ {257, "dcroat"},
+ {258, ""},
+ {999, ""},
+ {0xffff, ""},
+ }
+
+ for _, tc := range testCases {
+ if tc.x >= numBuiltInPostNames {
+ continue
+ }
+ i := builtInPostNamesOffsets[tc.x+0]
+ j := builtInPostNamesOffsets[tc.x+1]
+ got := builtInPostNamesData[i:j]
+ if got != tc.want {
+ t.Errorf("x=%d: got %q, want %q", tc.x, got, tc.want)
+ }
+ }
+}
diff --git a/vendor/golang.org/x/image/font/sfnt/truetype.go b/vendor/golang.org/x/image/font/sfnt/truetype.go
index 851904d10..c0eefba56 100644
--- a/vendor/golang.org/x/image/font/sfnt/truetype.go
+++ b/vendor/golang.org/x/image/font/sfnt/truetype.go
@@ -113,6 +113,11 @@ func appendGlyfSegments(dst []Segment, data []byte) ([]Segment, error) {
return nil, errInvalidGlyphData
}
+ // TODO: support compound glyphs.
+ if numContours < 0 {
+ return nil, errUnsupportedCompoundGlyph
+ }
+
// Skip the hinting instructions.
index += 2
if index > len(data) {
@@ -124,19 +129,14 @@ func appendGlyfSegments(dst []Segment, data []byte) ([]Segment, error) {
return nil, errInvalidGlyphData
}
- // TODO: support compound glyphs.
- if numContours < 0 {
- return nil, errUnsupportedCompoundGlyph
- }
-
// For simple (non-compound) glyphs, the remainder of the glyf data
// consists of (flags, x, y) points: the Bézier curve segments. These are
- // stored in columns (all the flags first, then all the x co-ordinates,
- // then all the y co-ordinates), not rows, as it compresses better.
+ // stored in columns (all the flags first, then all the x coordinates, then
+ // all the y coordinates), not rows, as it compresses better.
//
// Decoding those points in row order involves two passes. The first pass
// determines the indexes (relative to the data slice) of where the flags,
- // the x co-ordinates and the y co-ordinates each start.
+ // the x coordinates and the y coordinates each start.
flagIndex := int32(index)
xIndex, yIndex, ok := findXYIndexes(data, index, numPoints)
if !ok {
@@ -357,9 +357,18 @@ func (g *glyfIter) nextSegment() (ok bool) {
return true
}
+ // Convert the tuple (g.x, g.y) to a fixed.Point26_6, since the latter
+ // is what's held in a Segment. The input (g.x, g.y) is a pair of int16
+ // values, measured in font units, since that is what the underlying
+ // format provides. The output is a pair of fixed.Int26_6 values. A
+ // fixed.Int26_6 usually represents a 26.6 fixed number of pixels, but
+ // this here is just a straight numerical conversion, with no scaling
+ // factor. A later step scales the Segment.Args values by such a factor
+ // to convert e.g. 1792 font units to 10.5 pixels at 2048 font units
+ // per em and 12 ppem (pixels per em).
p := fixed.Point26_6{
- X: fixed.Int26_6(g.x) << 6,
- Y: fixed.Int26_6(g.y) << 6,
+ X: fixed.Int26_6(g.x),
+ Y: fixed.Int26_6(g.y),
}
if !g.firstOnCurveValid {
diff --git a/vendor/golang.org/x/image/font/testdata/cmapTest.sfd b/vendor/golang.org/x/image/font/testdata/cmapTest.sfd
new file mode 100644
index 000000000..34c7cd659
--- /dev/null
+++ b/vendor/golang.org/x/image/font/testdata/cmapTest.sfd
@@ -0,0 +1,265 @@
+SplineFontDB: 3.0
+FontName: cmapTest
+FullName: cmapTest
+FamilyName: cmapTest
+Weight: Regular
+Copyright: Copyright 2016 The Go Authors. All rights reserved.\nUse of this font is governed by a BSD-style license that can be found at https://golang.org/LICENSE.
+Version: 001.000
+ItalicAngle: -11.25
+UnderlinePosition: -204
+UnderlineWidth: 102
+Ascent: 1638
+Descent: 410
+LayerCount: 2
+Layer: 0 1 "Back" 1
+Layer: 1 1 "Fore" 0
+XUID: [1021 367 888937226 7862908]
+FSType: 8
+OS2Version: 0
+OS2_WeightWidthSlopeOnly: 0
+OS2_UseTypoMetrics: 1
+CreationTime: 1484386143
+ModificationTime: 1486021330
+PfmFamily: 17
+TTFWeight: 400
+TTFWidth: 5
+LineGap: 184
+VLineGap: 0
+OS2TypoAscent: 0
+OS2TypoAOffset: 1
+OS2TypoDescent: 0
+OS2TypoDOffset: 1
+OS2TypoLinegap: 184
+OS2WinAscent: 0
+OS2WinAOffset: 1
+OS2WinDescent: 0
+OS2WinDOffset: 1
+HheadAscent: 0
+HheadAOffset: 1
+HheadDescent: 0
+HheadDOffset: 1
+OS2Vendor: 'PfEd'
+MarkAttachClasses: 1
+DEI: 91125
+LangName: 1033
+Encoding: UnicodeFull
+UnicodeInterp: none
+NameList: Adobe Glyph List
+DisplaySize: -24
+AntiAlias: 1
+FitToEm: 1
+WinInfo: 126976 32 23
+BeginPrivate: 0
+EndPrivate
+TeXData: 1 0 0 346030 173015 115343 0 -1048576 115343 783286 444596 497025 792723 393216 433062 380633 303038 157286 324010 404750 52429 2506097 1059062 262144
+BeginChars: 1114112 13
+
+StartChar: zero
+Encoding: 48 48 0
+Width: 800
+VWidth: 0
+Flags: W
+LayerCount: 2
+Fore
+SplineSet
+0 0 m 29,0,-1
+ 400 800 l 25,1,-1
+ 800 0 l 25,2,-1
+ 0 0 l 29,0,-1
+EndSplineSet
+Validated: 1
+EndChar
+
+StartChar: one
+Encoding: 49 49 1
+Width: 800
+VWidth: 0
+Flags: W
+LayerCount: 2
+Fore
+SplineSet
+0 0 m 29,0,-1
+ 400 800 l 25,1,-1
+ 800 0 l 25,2,-1
+ 0 0 l 29,0,-1
+EndSplineSet
+Validated: 1
+EndChar
+
+StartChar: two
+Encoding: 50 50 2
+Width: 800
+VWidth: 0
+Flags: W
+LayerCount: 2
+Fore
+SplineSet
+0 0 m 29,0,-1
+ 400 800 l 25,1,-1
+ 800 0 l 25,2,-1
+ 0 0 l 29,0,-1
+EndSplineSet
+Validated: 1
+EndChar
+
+StartChar: A
+Encoding: 65 65 3
+Width: 800
+VWidth: 0
+Flags: W
+LayerCount: 2
+Fore
+SplineSet
+0 0 m 29,0,-1
+ 400 800 l 25,1,-1
+ 800 0 l 25,2,-1
+ 0 0 l 29,0,-1
+EndSplineSet
+Validated: 1
+EndChar
+
+StartChar: uni4E2D
+Encoding: 20013 20013 4
+Width: 800
+VWidth: 0
+Flags: W
+LayerCount: 2
+Fore
+SplineSet
+0 0 m 29,0,-1
+ 400 800 l 25,1,-1
+ 800 0 l 25,2,-1
+ 0 0 l 29,0,-1
+EndSplineSet
+Validated: 1
+EndChar
+
+StartChar: u1F0A1
+Encoding: 127137 127137 5
+Width: 800
+VWidth: 0
+Flags: W
+LayerCount: 2
+Fore
+SplineSet
+0 0 m 29,0,-1
+ 400 800 l 25,1,-1
+ 800 0 l 25,2,-1
+ 0 0 l 29,0,-1
+EndSplineSet
+Validated: 1
+EndChar
+
+StartChar: ydieresis
+Encoding: 255 255 6
+Width: 800
+VWidth: 0
+Flags: W
+LayerCount: 2
+Fore
+SplineSet
+0 0 m 29,0,-1
+ 400 800 l 25,1,-1
+ 800 0 l 25,2,-1
+ 0 0 l 29,0,-1
+EndSplineSet
+Validated: 1
+EndChar
+
+StartChar: Amacron
+Encoding: 256 256 7
+Width: 800
+VWidth: 0
+Flags: W
+LayerCount: 2
+Fore
+SplineSet
+0 0 m 29,0,-1
+ 400 800 l 25,1,-1
+ 800 0 l 25,2,-1
+ 0 0 l 29,0,-1
+EndSplineSet
+Validated: 1
+EndChar
+
+StartChar: amacron
+Encoding: 257 257 8
+Width: 800
+VWidth: 0
+Flags: W
+LayerCount: 2
+Fore
+SplineSet
+0 0 m 29,0,-1
+ 400 800 l 25,1,-1
+ 800 0 l 25,2,-1
+ 0 0 l 29,0,-1
+EndSplineSet
+Validated: 1
+EndChar
+
+StartChar: B
+Encoding: 66 66 9
+Width: 800
+VWidth: 0
+Flags: W
+LayerCount: 2
+Fore
+SplineSet
+0 0 m 29,0,-1
+ 400 800 l 25,1,-1
+ 800 0 l 25,2,-1
+ 0 0 l 29,0,-1
+EndSplineSet
+Validated: 1
+EndChar
+
+StartChar: a
+Encoding: 97 97 10
+Width: 800
+VWidth: 0
+Flags: W
+LayerCount: 2
+Fore
+SplineSet
+0 0 m 29,0,-1
+ 400 800 l 25,1,-1
+ 800 0 l 25,2,-1
+ 0 0 l 29,0,-1
+EndSplineSet
+Validated: 1
+EndChar
+
+StartChar: u1F0B1
+Encoding: 127153 127153 11
+Width: 800
+VWidth: 0
+Flags: W
+LayerCount: 2
+Fore
+SplineSet
+0 0 m 29,0,-1
+ 400 800 l 25,1,-1
+ 800 0 l 25,2,-1
+ 0 0 l 29,0,-1
+EndSplineSet
+Validated: 1
+EndChar
+
+StartChar: u1F0B2
+Encoding: 127154 127154 12
+Width: 800
+VWidth: 0
+Flags: W
+LayerCount: 2
+Fore
+SplineSet
+0 0 m 29,0,-1
+ 400 800 l 25,1,-1
+ 800 0 l 25,2,-1
+ 0 0 l 29,0,-1
+EndSplineSet
+Validated: 1
+EndChar
+EndChars
+EndSplineFont
diff --git a/vendor/golang.org/x/image/font/testdata/cmapTest.ttf b/vendor/golang.org/x/image/font/testdata/cmapTest.ttf
new file mode 100644
index 000000000..ebe6be200
--- /dev/null
+++ b/vendor/golang.org/x/image/font/testdata/cmapTest.ttf
Binary files differ
diff --git a/vendor/golang.org/x/image/testdata/go-turns-two-down-ab.png b/vendor/golang.org/x/image/testdata/go-turns-two-down-ab.png
index 317c3afa1..ed5a2f6b2 100644
--- a/vendor/golang.org/x/image/testdata/go-turns-two-down-ab.png
+++ b/vendor/golang.org/x/image/testdata/go-turns-two-down-ab.png
Binary files differ
diff --git a/vendor/golang.org/x/image/testdata/go-turns-two-down-bl.png b/vendor/golang.org/x/image/testdata/go-turns-two-down-bl.png
index 597d3628d..5c8b6529e 100644
--- a/vendor/golang.org/x/image/testdata/go-turns-two-down-bl.png
+++ b/vendor/golang.org/x/image/testdata/go-turns-two-down-bl.png
Binary files differ
diff --git a/vendor/golang.org/x/image/testdata/go-turns-two-down-cr.png b/vendor/golang.org/x/image/testdata/go-turns-two-down-cr.png
index ad1c20a2f..633354d52 100644
--- a/vendor/golang.org/x/image/testdata/go-turns-two-down-cr.png
+++ b/vendor/golang.org/x/image/testdata/go-turns-two-down-cr.png
Binary files differ
diff --git a/vendor/golang.org/x/image/testdata/go-turns-two-down-nn.png b/vendor/golang.org/x/image/testdata/go-turns-two-down-nn.png
index 166841a76..1debc306a 100644
--- a/vendor/golang.org/x/image/testdata/go-turns-two-down-nn.png
+++ b/vendor/golang.org/x/image/testdata/go-turns-two-down-nn.png
Binary files differ
diff --git a/vendor/golang.org/x/image/testdata/go-turns-two-rotate-ab.png b/vendor/golang.org/x/image/testdata/go-turns-two-rotate-ab.png
index 04fceaa77..a3703a92a 100644
--- a/vendor/golang.org/x/image/testdata/go-turns-two-rotate-ab.png
+++ b/vendor/golang.org/x/image/testdata/go-turns-two-rotate-ab.png
Binary files differ
diff --git a/vendor/golang.org/x/image/testdata/go-turns-two-rotate-bl.png b/vendor/golang.org/x/image/testdata/go-turns-two-rotate-bl.png
index c8b717e22..23105b3bd 100644
--- a/vendor/golang.org/x/image/testdata/go-turns-two-rotate-bl.png
+++ b/vendor/golang.org/x/image/testdata/go-turns-two-rotate-bl.png
Binary files differ
diff --git a/vendor/golang.org/x/image/testdata/go-turns-two-rotate-cr.png b/vendor/golang.org/x/image/testdata/go-turns-two-rotate-cr.png
index 7e5cd9f62..d8d9d21e9 100644
--- a/vendor/golang.org/x/image/testdata/go-turns-two-rotate-cr.png
+++ b/vendor/golang.org/x/image/testdata/go-turns-two-rotate-cr.png
Binary files differ
diff --git a/vendor/golang.org/x/image/testdata/go-turns-two-rotate-nn.png b/vendor/golang.org/x/image/testdata/go-turns-two-rotate-nn.png
index 702c86352..a5ba2822f 100644
--- a/vendor/golang.org/x/image/testdata/go-turns-two-rotate-nn.png
+++ b/vendor/golang.org/x/image/testdata/go-turns-two-rotate-nn.png
Binary files differ
diff --git a/vendor/golang.org/x/image/testdata/go-turns-two-up-ab.png b/vendor/golang.org/x/image/testdata/go-turns-two-up-ab.png
index 072446dc9..98e92e258 100644
--- a/vendor/golang.org/x/image/testdata/go-turns-two-up-ab.png
+++ b/vendor/golang.org/x/image/testdata/go-turns-two-up-ab.png
Binary files differ
diff --git a/vendor/golang.org/x/image/testdata/go-turns-two-up-bl.png b/vendor/golang.org/x/image/testdata/go-turns-two-up-bl.png
index c1bf630f4..4a2323dd1 100644
--- a/vendor/golang.org/x/image/testdata/go-turns-two-up-bl.png
+++ b/vendor/golang.org/x/image/testdata/go-turns-two-up-bl.png
Binary files differ
diff --git a/vendor/golang.org/x/image/testdata/go-turns-two-up-cr.png b/vendor/golang.org/x/image/testdata/go-turns-two-up-cr.png
index 0ac83002f..1d9603332 100644
--- a/vendor/golang.org/x/image/testdata/go-turns-two-up-cr.png
+++ b/vendor/golang.org/x/image/testdata/go-turns-two-up-cr.png
Binary files differ
diff --git a/vendor/golang.org/x/image/testdata/go-turns-two-up-nn.png b/vendor/golang.org/x/image/testdata/go-turns-two-up-nn.png
index eb63cb91e..93a2806a3 100644
--- a/vendor/golang.org/x/image/testdata/go-turns-two-up-nn.png
+++ b/vendor/golang.org/x/image/testdata/go-turns-two-up-nn.png
Binary files differ
diff --git a/vendor/golang.org/x/image/testdata/tux-rotate-ab.png b/vendor/golang.org/x/image/testdata/tux-rotate-ab.png
index 181966cae..d604ec912 100644
--- a/vendor/golang.org/x/image/testdata/tux-rotate-ab.png
+++ b/vendor/golang.org/x/image/testdata/tux-rotate-ab.png
Binary files differ
diff --git a/vendor/golang.org/x/image/testdata/tux-rotate-bl.png b/vendor/golang.org/x/image/testdata/tux-rotate-bl.png
index af3f4b0d5..85b860282 100644
--- a/vendor/golang.org/x/image/testdata/tux-rotate-bl.png
+++ b/vendor/golang.org/x/image/testdata/tux-rotate-bl.png
Binary files differ
diff --git a/vendor/golang.org/x/image/testdata/tux-rotate-cr.png b/vendor/golang.org/x/image/testdata/tux-rotate-cr.png
index e5cff31f1..dbc42ab52 100644
--- a/vendor/golang.org/x/image/testdata/tux-rotate-cr.png
+++ b/vendor/golang.org/x/image/testdata/tux-rotate-cr.png
Binary files differ
diff --git a/vendor/golang.org/x/image/testdata/tux-rotate-nn.png b/vendor/golang.org/x/image/testdata/tux-rotate-nn.png
index c775c61dc..0d40c0d95 100644
--- a/vendor/golang.org/x/image/testdata/tux-rotate-nn.png
+++ b/vendor/golang.org/x/image/testdata/tux-rotate-nn.png
Binary files differ
diff --git a/vendor/golang.org/x/net/bpf/vm_bpf_test.go b/vendor/golang.org/x/net/bpf/vm_bpf_test.go
index 426362361..76dd970e6 100644
--- a/vendor/golang.org/x/net/bpf/vm_bpf_test.go
+++ b/vendor/golang.org/x/net/bpf/vm_bpf_test.go
@@ -33,7 +33,7 @@ func canUseOSVM() bool {
}
// All BPF tests against both the Go VM and OS VM are assumed to
-// be used with a UDP socket. As a result, the entire contents
+// be used with a UDP socket. As a result, the entire contents
// of a UDP datagram is sent through the BPF program, but only
// the body after the UDP header will ever be returned in output.
@@ -85,7 +85,7 @@ func (mvm *multiVirtualMachine) Run(in []byte) (int, error) {
}
// All tests have a UDP header as part of input, because the OS VM
- // packets always will. For the Go VM, this output is trimmed before
+ // packets always will. For the Go VM, this output is trimmed before
// being sent back to tests.
goOut, goErr := mvm.goVM.Run(in)
if goOut >= udpHeaderLen {
@@ -149,6 +149,9 @@ func testOSVM(t *testing.T, filter []bpf.Instruction) (virtualMachine, func()) {
p := ipv4.NewPacketConn(l)
if err = p.SetBPF(prog); err != nil {
+ if err.Error() == "operation not supported" { // TODO: gross. remove once 19051 fixed.
+ t.Skip("Skipping until Issue 19051 is fixed.")
+ }
t.Fatalf("failed to attach BPF program to listener: %v", err)
}
diff --git a/vendor/golang.org/x/net/context/context.go b/vendor/golang.org/x/net/context/context.go
index 134654cf7..f143ed6a1 100644
--- a/vendor/golang.org/x/net/context/context.go
+++ b/vendor/golang.org/x/net/context/context.go
@@ -7,7 +7,7 @@
// and between processes.
//
// Incoming requests to a server should create a Context, and outgoing calls to
-// servers should accept a Context. The chain of function calls between must
+// servers should accept a Context. The chain of function calls between must
// propagate the Context, optionally replacing it with a modified copy created
// using WithDeadline, WithTimeout, WithCancel, or WithValue.
//
@@ -16,14 +16,14 @@
// propagation:
//
// Do not store Contexts inside a struct type; instead, pass a Context
-// explicitly to each function that needs it. The Context should be the first
+// explicitly to each function that needs it. The Context should be the first
// parameter, typically named ctx:
//
// func DoSomething(ctx context.Context, arg Arg) error {
// // ... use ctx ...
// }
//
-// Do not pass a nil Context, even if a function permits it. Pass context.TODO
+// Do not pass a nil Context, even if a function permits it. Pass context.TODO
// if you are unsure about which Context to use.
//
// Use context Values only for request-scoped data that transits processes and
@@ -44,13 +44,13 @@ import "time"
// Context's methods may be called by multiple goroutines simultaneously.
type Context interface {
// Deadline returns the time when work done on behalf of this context
- // should be canceled. Deadline returns ok==false when no deadline is
- // set. Successive calls to Deadline return the same results.
+ // should be canceled. Deadline returns ok==false when no deadline is
+ // set. Successive calls to Deadline return the same results.
Deadline() (deadline time.Time, ok bool)
// Done returns a channel that's closed when work done on behalf of this
- // context should be canceled. Done may return nil if this context can
- // never be canceled. Successive calls to Done return the same value.
+ // context should be canceled. Done may return nil if this context can
+ // never be canceled. Successive calls to Done return the same value.
//
// WithCancel arranges for Done to be closed when cancel is called;
// WithDeadline arranges for Done to be closed when the deadline
@@ -79,24 +79,24 @@ type Context interface {
// a Done channel for cancelation.
Done() <-chan struct{}
- // Err returns a non-nil error value after Done is closed. Err returns
+ // Err returns a non-nil error value after Done is closed. Err returns
// Canceled if the context was canceled or DeadlineExceeded if the
- // context's deadline passed. No other values for Err are defined.
+ // context's deadline passed. No other values for Err are defined.
// After Done is closed, successive calls to Err return the same value.
Err() error
// Value returns the value associated with this context for key, or nil
- // if no value is associated with key. Successive calls to Value with
+ // if no value is associated with key. Successive calls to Value with
// the same key returns the same result.
//
// Use context values only for request-scoped data that transits
// processes and API boundaries, not for passing optional parameters to
// functions.
//
- // A key identifies a specific value in a Context. Functions that wish
+ // A key identifies a specific value in a Context. Functions that wish
// to store values in Context typically allocate a key in a global
// variable then use that key as the argument to context.WithValue and
- // Context.Value. A key can be any type that supports equality;
+ // Context.Value. A key can be any type that supports equality;
// packages should define keys as an unexported type to avoid
// collisions.
//
@@ -115,7 +115,7 @@ type Context interface {
// // This prevents collisions with keys defined in other packages.
// type key int
//
- // // userKey is the key for user.User values in Contexts. It is
+ // // userKey is the key for user.User values in Contexts. It is
// // unexported; clients use user.NewContext and user.FromContext
// // instead of using this key directly.
// var userKey key = 0
@@ -134,14 +134,14 @@ type Context interface {
}
// Background returns a non-nil, empty Context. It is never canceled, has no
-// values, and has no deadline. It is typically used by the main function,
+// values, and has no deadline. It is typically used by the main function,
// initialization, and tests, and as the top-level Context for incoming
// requests.
func Background() Context {
return background
}
-// TODO returns a non-nil, empty Context. Code should use context.TODO when
+// TODO returns a non-nil, empty Context. Code should use context.TODO when
// it's unclear which Context to use or it is not yet available (because the
// surrounding function has not yet been extended to accept a Context
// parameter). TODO is recognized by static analysis tools that determine
diff --git a/vendor/golang.org/x/net/context/ctxhttp/ctxhttp_17_test.go b/vendor/golang.org/x/net/context/ctxhttp/ctxhttp_17_test.go
index 9f0f90f1b..72411b1b6 100644
--- a/vendor/golang.org/x/net/context/ctxhttp/ctxhttp_17_test.go
+++ b/vendor/golang.org/x/net/context/ctxhttp/ctxhttp_17_test.go
@@ -19,6 +19,7 @@ func TestGo17Context(t *testing.T) {
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "ok")
}))
+ defer ts.Close()
ctx := context.Background()
resp, err := Get(ctx, http.DefaultClient, ts.URL)
if resp == nil || err != nil {
diff --git a/vendor/golang.org/x/net/context/go17.go b/vendor/golang.org/x/net/context/go17.go
index f8cda19ad..d20f52b7d 100644
--- a/vendor/golang.org/x/net/context/go17.go
+++ b/vendor/golang.org/x/net/context/go17.go
@@ -35,8 +35,8 @@ func WithCancel(parent Context) (ctx Context, cancel CancelFunc) {
}
// WithDeadline returns a copy of the parent context with the deadline adjusted
-// to be no later than d. If the parent's deadline is already earlier than d,
-// WithDeadline(parent, d) is semantically equivalent to parent. The returned
+// to be no later than d. If the parent's deadline is already earlier than d,
+// WithDeadline(parent, d) is semantically equivalent to parent. The returned
// context's Done channel is closed when the deadline expires, when the returned
// cancel function is called, or when the parent context's Done channel is
// closed, whichever happens first.
diff --git a/vendor/golang.org/x/net/context/pre_go17.go b/vendor/golang.org/x/net/context/pre_go17.go
index 5a30acabd..0f35592df 100644
--- a/vendor/golang.org/x/net/context/pre_go17.go
+++ b/vendor/golang.org/x/net/context/pre_go17.go
@@ -13,7 +13,7 @@ import (
"time"
)
-// An emptyCtx is never canceled, has no values, and has no deadline. It is not
+// An emptyCtx is never canceled, has no values, and has no deadline. It is not
// struct{}, since vars of this type must have distinct addresses.
type emptyCtx int
@@ -104,7 +104,7 @@ func propagateCancel(parent Context, child canceler) {
}
// parentCancelCtx follows a chain of parent references until it finds a
-// *cancelCtx. This function understands how each of the concrete types in this
+// *cancelCtx. This function understands how each of the concrete types in this
// package represents its parent.
func parentCancelCtx(parent Context) (*cancelCtx, bool) {
for {
@@ -134,14 +134,14 @@ func removeChild(parent Context, child canceler) {
p.mu.Unlock()
}
-// A canceler is a context type that can be canceled directly. The
+// A canceler is a context type that can be canceled directly. The
// implementations are *cancelCtx and *timerCtx.
type canceler interface {
cancel(removeFromParent bool, err error)
Done() <-chan struct{}
}
-// A cancelCtx can be canceled. When canceled, it also cancels any children
+// A cancelCtx can be canceled. When canceled, it also cancels any children
// that implement canceler.
type cancelCtx struct {
Context
@@ -193,8 +193,8 @@ func (c *cancelCtx) cancel(removeFromParent bool, err error) {
}
// WithDeadline returns a copy of the parent context with the deadline adjusted
-// to be no later than d. If the parent's deadline is already earlier than d,
-// WithDeadline(parent, d) is semantically equivalent to parent. The returned
+// to be no later than d. If the parent's deadline is already earlier than d,
+// WithDeadline(parent, d) is semantically equivalent to parent. The returned
// context's Done channel is closed when the deadline expires, when the returned
// cancel function is called, or when the parent context's Done channel is
// closed, whichever happens first.
@@ -226,8 +226,8 @@ func WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc) {
return c, func() { c.cancel(true, Canceled) }
}
-// A timerCtx carries a timer and a deadline. It embeds a cancelCtx to
-// implement Done and Err. It implements cancel by stopping its timer then
+// A timerCtx carries a timer and a deadline. It embeds a cancelCtx to
+// implement Done and Err. It implements cancel by stopping its timer then
// delegating to cancelCtx.cancel.
type timerCtx struct {
*cancelCtx
@@ -281,7 +281,7 @@ func WithValue(parent Context, key interface{}, val interface{}) Context {
return &valueCtx{parent, key, val}
}
-// A valueCtx carries a key-value pair. It implements Value for that key and
+// A valueCtx carries a key-value pair. It implements Value for that key and
// delegates all other calls to the embedded Context.
type valueCtx struct {
Context
diff --git a/vendor/golang.org/x/net/dns/dnsmessage/message.go b/vendor/golang.org/x/net/dns/dnsmessage/message.go
new file mode 100644
index 000000000..da43b0ba4
--- /dev/null
+++ b/vendor/golang.org/x/net/dns/dnsmessage/message.go
@@ -0,0 +1,1418 @@
+// Copyright 2009 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package dnsmessage provides a mostly RFC 1035 compliant implementation of
+// DNS message packing and unpacking.
+//
+// This implementation is designed to minimize heap allocations and avoid
+// unnecessary packing and unpacking as much as possible.
+package dnsmessage
+
+import (
+ "errors"
+)
+
+// Packet formats
+
+// A Type is a type of DNS request and response.
+type Type uint16
+
+// A Class is a type of network.
+type Class uint16
+
+// An OpCode is a DNS operation code.
+type OpCode uint16
+
+// An RCode is a DNS response status code.
+type RCode uint16
+
+// Wire constants.
+const (
+ // ResourceHeader.Type and Question.Type
+ TypeA Type = 1
+ TypeNS Type = 2
+ TypeCNAME Type = 5
+ TypeSOA Type = 6
+ TypePTR Type = 12
+ TypeMX Type = 15
+ TypeTXT Type = 16
+ TypeAAAA Type = 28
+ TypeSRV Type = 33
+
+ // Question.Type
+ TypeWKS Type = 11
+ TypeHINFO Type = 13
+ TypeMINFO Type = 14
+ TypeAXFR Type = 252
+ TypeALL Type = 255
+
+ // ResourceHeader.Class and Question.Class
+ ClassINET Class = 1
+ ClassCSNET Class = 2
+ ClassCHAOS Class = 3
+ ClassHESIOD Class = 4
+
+ // Question.Class
+ ClassANY Class = 255
+
+ // Message.Rcode
+ RCodeSuccess RCode = 0
+ RCodeFormatError RCode = 1
+ RCodeServerFailure RCode = 2
+ RCodeNameError RCode = 3
+ RCodeNotImplemented RCode = 4
+ RCodeRefused RCode = 5
+)
+
+var (
+ // ErrNotStarted indicates that the prerequisite information isn't
+ // available yet because the previous records haven't been appropriately
+ // parsed or skipped.
+ ErrNotStarted = errors.New("parsing of this type isn't available yet")
+
+ // ErrSectionDone indicated that all records in the section have been
+ // parsed.
+ ErrSectionDone = errors.New("parsing of this section has completed")
+
+ errBaseLen = errors.New("insufficient data for base length type")
+ errCalcLen = errors.New("insufficient data for calculated length type")
+ errReserved = errors.New("segment prefix is reserved")
+ errTooManyPtr = errors.New("too many pointers (>10)")
+ errInvalidPtr = errors.New("invalid pointer")
+ errResourceLen = errors.New("insufficient data for resource body length")
+ errSegTooLong = errors.New("segment length too long")
+ errZeroSegLen = errors.New("zero length segment")
+ errResTooLong = errors.New("resource length too long")
+ errTooManyQuestions = errors.New("too many Questions to pack (>65535)")
+ errTooManyAnswers = errors.New("too many Answers to pack (>65535)")
+ errTooManyAuthorities = errors.New("too many Authorities to pack (>65535)")
+ errTooManyAdditionals = errors.New("too many Additionals to pack (>65535)")
+)
+
+type nestedError struct {
+ // s is the current level's error message.
+ s string
+
+ // err is the nested error.
+ err error
+}
+
+// nestedError implements error.Error.
+func (e *nestedError) Error() string {
+ return e.s + ": " + e.err.Error()
+}
+
+// Header is a representation of a DNS message header.
+type Header struct {
+ ID uint16
+ Response bool
+ OpCode OpCode
+ Authoritative bool
+ Truncated bool
+ RecursionDesired bool
+ RecursionAvailable bool
+ RCode RCode
+}
+
+func (m *Header) pack() (id uint16, bits uint16) {
+ id = m.ID
+ bits = uint16(m.OpCode)<<11 | uint16(m.RCode)
+ if m.RecursionAvailable {
+ bits |= headerBitRA
+ }
+ if m.RecursionDesired {
+ bits |= headerBitRD
+ }
+ if m.Truncated {
+ bits |= headerBitTC
+ }
+ if m.Authoritative {
+ bits |= headerBitAA
+ }
+ if m.Response {
+ bits |= headerBitQR
+ }
+ return
+}
+
+// Message is a representation of a DNS message.
+type Message struct {
+ Header
+ Questions []Question
+ Answers []Resource
+ Authorities []Resource
+ Additionals []Resource
+}
+
+type section uint8
+
+const (
+ sectionHeader section = iota
+ sectionQuestions
+ sectionAnswers
+ sectionAuthorities
+ sectionAdditionals
+ sectionDone
+
+ headerBitQR = 1 << 15 // query/response (response=1)
+ headerBitAA = 1 << 10 // authoritative
+ headerBitTC = 1 << 9 // truncated
+ headerBitRD = 1 << 8 // recursion desired
+ headerBitRA = 1 << 7 // recursion available
+)
+
+var sectionNames = map[section]string{
+ sectionHeader: "header",
+ sectionQuestions: "Question",
+ sectionAnswers: "Answer",
+ sectionAuthorities: "Authority",
+ sectionAdditionals: "Additional",
+}
+
+// header is the wire format for a DNS message header.
+type header struct {
+ id uint16
+ bits uint16
+ questions uint16
+ answers uint16
+ authorities uint16
+ additionals uint16
+}
+
+func (h *header) count(sec section) uint16 {
+ switch sec {
+ case sectionQuestions:
+ return h.questions
+ case sectionAnswers:
+ return h.answers
+ case sectionAuthorities:
+ return h.authorities
+ case sectionAdditionals:
+ return h.additionals
+ }
+ return 0
+}
+
+func (h *header) pack(msg []byte) []byte {
+ msg = packUint16(msg, h.id)
+ msg = packUint16(msg, h.bits)
+ msg = packUint16(msg, h.questions)
+ msg = packUint16(msg, h.answers)
+ msg = packUint16(msg, h.authorities)
+ return packUint16(msg, h.additionals)
+}
+
+func (h *header) unpack(msg []byte, off int) (int, error) {
+ newOff := off
+ var err error
+ if h.id, newOff, err = unpackUint16(msg, newOff); err != nil {
+ return off, &nestedError{"id", err}
+ }
+ if h.bits, newOff, err = unpackUint16(msg, newOff); err != nil {
+ return off, &nestedError{"bits", err}
+ }
+ if h.questions, newOff, err = unpackUint16(msg, newOff); err != nil {
+ return off, &nestedError{"questions", err}
+ }
+ if h.answers, newOff, err = unpackUint16(msg, newOff); err != nil {
+ return off, &nestedError{"answers", err}
+ }
+ if h.authorities, newOff, err = unpackUint16(msg, newOff); err != nil {
+ return off, &nestedError{"authorities", err}
+ }
+ if h.additionals, newOff, err = unpackUint16(msg, newOff); err != nil {
+ return off, &nestedError{"additionals", err}
+ }
+ return newOff, nil
+}
+
+func (h *header) header() Header {
+ return Header{
+ ID: h.id,
+ Response: (h.bits & headerBitQR) != 0,
+ OpCode: OpCode(h.bits>>11) & 0xF,
+ Authoritative: (h.bits & headerBitAA) != 0,
+ Truncated: (h.bits & headerBitTC) != 0,
+ RecursionDesired: (h.bits & headerBitRD) != 0,
+ RecursionAvailable: (h.bits & headerBitRA) != 0,
+ RCode: RCode(h.bits & 0xF),
+ }
+}
+
+// A Resource is a DNS resource record.
+type Resource interface {
+ // Header return's the Resource's ResourceHeader.
+ Header() *ResourceHeader
+
+ // pack packs a Resource except for its header.
+ pack(msg []byte, compression map[string]int) ([]byte, error)
+
+ // realType returns the actual type of the Resource. This is used to
+ // fill in the header Type field.
+ realType() Type
+}
+
+func packResource(msg []byte, resource Resource, compression map[string]int) ([]byte, error) {
+ oldMsg := msg
+ resource.Header().Type = resource.realType()
+ msg, length, err := resource.Header().pack(msg, compression)
+ if err != nil {
+ return msg, &nestedError{"ResourceHeader", err}
+ }
+ preLen := len(msg)
+ msg, err = resource.pack(msg, compression)
+ if err != nil {
+ return msg, &nestedError{"content", err}
+ }
+ conLen := len(msg) - preLen
+ if conLen > int(^uint16(0)) {
+ return oldMsg, errResTooLong
+ }
+ // Fill in the length now that we know how long the content is.
+ packUint16(length[:0], uint16(conLen))
+ resource.Header().Length = uint16(conLen)
+ return msg, nil
+}
+
+// A Parser allows incrementally parsing a DNS message.
+//
+// When parsing is started, the Header is parsed. Next, each Question can be
+// either parsed or skipped. Alternatively, all Questions can be skipped at
+// once. When all Questions have been parsed, attempting to parse Questions
+// will return (nil, nil) and attempting to skip Questions will return
+// (true, nil). After all Questions have been either parsed or skipped, all
+// Answers, Authorities and Additionals can be either parsed or skipped in the
+// same way, and each type of Resource must be fully parsed or skipped before
+// proceeding to the next type of Resource.
+//
+// Note that there is no requirement to fully skip or parse the message.
+type Parser struct {
+ msg []byte
+ header header
+
+ section section
+ off int
+ index int
+ resHeaderValid bool
+ resHeader ResourceHeader
+}
+
+// Start parses the header and enables the parsing of Questions.
+func (p *Parser) Start(msg []byte) (Header, error) {
+ if p.msg != nil {
+ *p = Parser{}
+ }
+ p.msg = msg
+ var err error
+ if p.off, err = p.header.unpack(msg, 0); err != nil {
+ return Header{}, &nestedError{"unpacking header", err}
+ }
+ p.section = sectionQuestions
+ return p.header.header(), nil
+}
+
+func (p *Parser) checkAdvance(sec section) error {
+ if p.section < sec {
+ return ErrNotStarted
+ }
+ if p.section > sec {
+ return ErrSectionDone
+ }
+ p.resHeaderValid = false
+ if p.index == int(p.header.count(sec)) {
+ p.index = 0
+ p.section++
+ return ErrSectionDone
+ }
+ return nil
+}
+
+func (p *Parser) resource(sec section) (Resource, error) {
+ var r Resource
+ hdr, err := p.resourceHeader(sec)
+ if err != nil {
+ return r, err
+ }
+ p.resHeaderValid = false
+ r, p.off, err = unpackResource(p.msg, p.off, hdr)
+ if err != nil {
+ return nil, &nestedError{"unpacking " + sectionNames[sec], err}
+ }
+ p.index++
+ return r, nil
+}
+
+func (p *Parser) resourceHeader(sec section) (ResourceHeader, error) {
+ if p.resHeaderValid {
+ return p.resHeader, nil
+ }
+ if err := p.checkAdvance(sec); err != nil {
+ return ResourceHeader{}, err
+ }
+ var hdr ResourceHeader
+ off, err := hdr.unpack(p.msg, p.off)
+ if err != nil {
+ return ResourceHeader{}, err
+ }
+ p.resHeaderValid = true
+ p.resHeader = hdr
+ p.off = off
+ return hdr, nil
+}
+
+func (p *Parser) skipResource(sec section) error {
+ if p.resHeaderValid {
+ newOff := p.off + int(p.resHeader.Length)
+ if newOff > len(p.msg) {
+ return errResourceLen
+ }
+ p.off = newOff
+ p.resHeaderValid = false
+ p.index++
+ return nil
+ }
+ if err := p.checkAdvance(sec); err != nil {
+ return err
+ }
+ var err error
+ p.off, err = skipResource(p.msg, p.off)
+ if err != nil {
+ return &nestedError{"skipping: " + sectionNames[sec], err}
+ }
+ p.index++
+ return nil
+}
+
+// Question parses a single Question.
+func (p *Parser) Question() (Question, error) {
+ if err := p.checkAdvance(sectionQuestions); err != nil {
+ return Question{}, err
+ }
+ name, off, err := unpackName(p.msg, p.off)
+ if err != nil {
+ return Question{}, &nestedError{"unpacking Question.Name", err}
+ }
+ typ, off, err := unpackType(p.msg, off)
+ if err != nil {
+ return Question{}, &nestedError{"unpacking Question.Type", err}
+ }
+ class, off, err := unpackClass(p.msg, off)
+ if err != nil {
+ return Question{}, &nestedError{"unpacking Question.Class", err}
+ }
+ p.off = off
+ p.index++
+ return Question{name, typ, class}, nil
+}
+
+// AllQuestions parses all Questions.
+func (p *Parser) AllQuestions() ([]Question, error) {
+ qs := make([]Question, 0, p.header.questions)
+ for {
+ q, err := p.Question()
+ if err == ErrSectionDone {
+ return qs, nil
+ }
+ if err != nil {
+ return nil, err
+ }
+ qs = append(qs, q)
+ }
+}
+
+// SkipQuestion skips a single Question.
+func (p *Parser) SkipQuestion() error {
+ if err := p.checkAdvance(sectionQuestions); err != nil {
+ return err
+ }
+ off, err := skipName(p.msg, p.off)
+ if err != nil {
+ return &nestedError{"skipping Question Name", err}
+ }
+ if off, err = skipType(p.msg, off); err != nil {
+ return &nestedError{"skipping Question Type", err}
+ }
+ if off, err = skipClass(p.msg, off); err != nil {
+ return &nestedError{"skipping Question Class", err}
+ }
+ p.off = off
+ p.index++
+ return nil
+}
+
+// SkipAllQuestions skips all Questions.
+func (p *Parser) SkipAllQuestions() error {
+ for {
+ if err := p.SkipQuestion(); err == ErrSectionDone {
+ return nil
+ } else if err != nil {
+ return err
+ }
+ }
+}
+
+// AnswerHeader parses a single Answer ResourceHeader.
+func (p *Parser) AnswerHeader() (ResourceHeader, error) {
+ return p.resourceHeader(sectionAnswers)
+}
+
+// Answer parses a single Answer Resource.
+func (p *Parser) Answer() (Resource, error) {
+ return p.resource(sectionAnswers)
+}
+
+// AllAnswers parses all Answer Resources.
+func (p *Parser) AllAnswers() ([]Resource, error) {
+ as := make([]Resource, 0, p.header.answers)
+ for {
+ a, err := p.Answer()
+ if err == ErrSectionDone {
+ return as, nil
+ }
+ if err != nil {
+ return nil, err
+ }
+ as = append(as, a)
+ }
+}
+
+// SkipAnswer skips a single Answer Resource.
+func (p *Parser) SkipAnswer() error {
+ return p.skipResource(sectionAnswers)
+}
+
+// SkipAllAnswers skips all Answer Resources.
+func (p *Parser) SkipAllAnswers() error {
+ for {
+ if err := p.SkipAnswer(); err == ErrSectionDone {
+ return nil
+ } else if err != nil {
+ return err
+ }
+ }
+}
+
+// AuthorityHeader parses a single Authority ResourceHeader.
+func (p *Parser) AuthorityHeader() (ResourceHeader, error) {
+ return p.resourceHeader(sectionAuthorities)
+}
+
+// Authority parses a single Authority Resource.
+func (p *Parser) Authority() (Resource, error) {
+ return p.resource(sectionAuthorities)
+}
+
+// AllAuthorities parses all Authority Resources.
+func (p *Parser) AllAuthorities() ([]Resource, error) {
+ as := make([]Resource, 0, p.header.authorities)
+ for {
+ a, err := p.Authority()
+ if err == ErrSectionDone {
+ return as, nil
+ }
+ if err != nil {
+ return nil, err
+ }
+ as = append(as, a)
+ }
+}
+
+// SkipAuthority skips a single Authority Resource.
+func (p *Parser) SkipAuthority() error {
+ return p.skipResource(sectionAuthorities)
+}
+
+// SkipAllAuthorities skips all Authority Resources.
+func (p *Parser) SkipAllAuthorities() error {
+ for {
+ if err := p.SkipAuthority(); err == ErrSectionDone {
+ return nil
+ } else if err != nil {
+ return err
+ }
+ }
+}
+
+// AdditionalHeader parses a single Additional ResourceHeader.
+func (p *Parser) AdditionalHeader() (ResourceHeader, error) {
+ return p.resourceHeader(sectionAdditionals)
+}
+
+// Additional parses a single Additional Resource.
+func (p *Parser) Additional() (Resource, error) {
+ return p.resource(sectionAdditionals)
+}
+
+// AllAdditionals parses all Additional Resources.
+func (p *Parser) AllAdditionals() ([]Resource, error) {
+ as := make([]Resource, 0, p.header.additionals)
+ for {
+ a, err := p.Additional()
+ if err == ErrSectionDone {
+ return as, nil
+ }
+ if err != nil {
+ return nil, err
+ }
+ as = append(as, a)
+ }
+}
+
+// SkipAdditional skips a single Additional Resource.
+func (p *Parser) SkipAdditional() error {
+ return p.skipResource(sectionAdditionals)
+}
+
+// SkipAllAdditionals skips all Additional Resources.
+func (p *Parser) SkipAllAdditionals() error {
+ for {
+ if err := p.SkipAdditional(); err == ErrSectionDone {
+ return nil
+ } else if err != nil {
+ return err
+ }
+ }
+}
+
+// Unpack parses a full Message.
+func (m *Message) Unpack(msg []byte) error {
+ var p Parser
+ var err error
+ if m.Header, err = p.Start(msg); err != nil {
+ return err
+ }
+ if m.Questions, err = p.AllQuestions(); err != nil {
+ return err
+ }
+ if m.Answers, err = p.AllAnswers(); err != nil {
+ return err
+ }
+ if m.Authorities, err = p.AllAuthorities(); err != nil {
+ return err
+ }
+ if m.Additionals, err = p.AllAdditionals(); err != nil {
+ return err
+ }
+ return nil
+}
+
+// Pack packs a full Message.
+func (m *Message) Pack() ([]byte, error) {
+ // Validate the lengths. It is very unlikely that anyone will try to
+ // pack more than 65535 of any particular type, but it is possible and
+ // we should fail gracefully.
+ if len(m.Questions) > int(^uint16(0)) {
+ return nil, errTooManyQuestions
+ }
+ if len(m.Answers) > int(^uint16(0)) {
+ return nil, errTooManyAnswers
+ }
+ if len(m.Authorities) > int(^uint16(0)) {
+ return nil, errTooManyAuthorities
+ }
+ if len(m.Additionals) > int(^uint16(0)) {
+ return nil, errTooManyAdditionals
+ }
+
+ var h header
+ h.id, h.bits = m.Header.pack()
+
+ h.questions = uint16(len(m.Questions))
+ h.answers = uint16(len(m.Answers))
+ h.authorities = uint16(len(m.Authorities))
+ h.additionals = uint16(len(m.Additionals))
+
+ // The starting capacity doesn't matter too much, but most DNS responses
+ // Will be <= 512 bytes as it is the limit for DNS over UDP.
+ msg := make([]byte, 0, 512)
+
+ msg = h.pack(msg)
+
+ // RFC 1035 allows (but does not require) compression for packing. RFC
+ // 1035 requires unpacking implementations to support compression, so
+ // unconditionally enabling it is fine.
+ //
+ // DNS lookups are typically done over UDP, and RFC 1035 states that UDP
+ // DNS packets can be a maximum of 512 bytes long. Without compression,
+ // many DNS response packets are over this limit, so enabling
+ // compression will help ensure compliance.
+ compression := map[string]int{}
+
+ for _, q := range m.Questions {
+ var err error
+ msg, err = q.pack(msg, compression)
+ if err != nil {
+ return nil, &nestedError{"packing Question", err}
+ }
+ }
+ for _, a := range m.Answers {
+ var err error
+ msg, err = packResource(msg, a, compression)
+ if err != nil {
+ return nil, &nestedError{"packing Answer", err}
+ }
+ }
+ for _, a := range m.Authorities {
+ var err error
+ msg, err = packResource(msg, a, compression)
+ if err != nil {
+ return nil, &nestedError{"packing Authority", err}
+ }
+ }
+ for _, a := range m.Additionals {
+ var err error
+ msg, err = packResource(msg, a, compression)
+ if err != nil {
+ return nil, &nestedError{"packing Additional", err}
+ }
+ }
+
+ return msg, nil
+}
+
+// An ResourceHeader is the header of a DNS resource record. There are
+// many types of DNS resource records, but they all share the same header.
+type ResourceHeader struct {
+ // Name is the domain name for which this resource record pertains.
+ Name string
+
+ // Type is the type of DNS resource record.
+ //
+ // This field will be set automatically during packing.
+ Type Type
+
+ // Class is the class of network to which this DNS resource record
+ // pertains.
+ Class Class
+
+ // TTL is the length of time (measured in seconds) which this resource
+ // record is valid for (time to live). All Resources in a set should
+ // have the same TTL (RFC 2181 Section 5.2).
+ TTL uint32
+
+ // Length is the length of data in the resource record after the header.
+ //
+ // This field will be set automatically during packing.
+ Length uint16
+}
+
+// Header implements Resource.Header.
+func (h *ResourceHeader) Header() *ResourceHeader {
+ return h
+}
+
+// pack packs all of the fields in a ResourceHeader except for the length. The
+// length bytes are returned as a slice so they can be filled in after the rest
+// of the Resource has been packed.
+func (h *ResourceHeader) pack(oldMsg []byte, compression map[string]int) (msg []byte, length []byte, err error) {
+ msg = oldMsg
+ if msg, err = packName(msg, h.Name, compression); err != nil {
+ return oldMsg, nil, &nestedError{"Name", err}
+ }
+ msg = packType(msg, h.Type)
+ msg = packClass(msg, h.Class)
+ msg = packUint32(msg, h.TTL)
+ lenBegin := len(msg)
+ msg = packUint16(msg, h.Length)
+ return msg, msg[lenBegin:], nil
+}
+
+func (h *ResourceHeader) unpack(msg []byte, off int) (int, error) {
+ newOff := off
+ var err error
+ if h.Name, newOff, err = unpackName(msg, newOff); err != nil {
+ return off, &nestedError{"Name", err}
+ }
+ if h.Type, newOff, err = unpackType(msg, newOff); err != nil {
+ return off, &nestedError{"Type", err}
+ }
+ if h.Class, newOff, err = unpackClass(msg, newOff); err != nil {
+ return off, &nestedError{"Class", err}
+ }
+ if h.TTL, newOff, err = unpackUint32(msg, newOff); err != nil {
+ return off, &nestedError{"TTL", err}
+ }
+ if h.Length, newOff, err = unpackUint16(msg, newOff); err != nil {
+ return off, &nestedError{"Length", err}
+ }
+ return newOff, nil
+}
+
+func skipResource(msg []byte, off int) (int, error) {
+ newOff, err := skipName(msg, off)
+ if err != nil {
+ return off, &nestedError{"Name", err}
+ }
+ if newOff, err = skipType(msg, newOff); err != nil {
+ return off, &nestedError{"Type", err}
+ }
+ if newOff, err = skipClass(msg, newOff); err != nil {
+ return off, &nestedError{"Class", err}
+ }
+ if newOff, err = skipUint32(msg, newOff); err != nil {
+ return off, &nestedError{"TTL", err}
+ }
+ length, newOff, err := unpackUint16(msg, newOff)
+ if err != nil {
+ return off, &nestedError{"Length", err}
+ }
+ if newOff += int(length); newOff > len(msg) {
+ return off, errResourceLen
+ }
+ return newOff, nil
+}
+
+func packUint16(msg []byte, field uint16) []byte {
+ return append(msg, byte(field>>8), byte(field))
+}
+
+func unpackUint16(msg []byte, off int) (uint16, int, error) {
+ if off+2 > len(msg) {
+ return 0, off, errBaseLen
+ }
+ return uint16(msg[off])<<8 | uint16(msg[off+1]), off + 2, nil
+}
+
+func skipUint16(msg []byte, off int) (int, error) {
+ if off+2 > len(msg) {
+ return off, errBaseLen
+ }
+ return off + 2, nil
+}
+
+func packType(msg []byte, field Type) []byte {
+ return packUint16(msg, uint16(field))
+}
+
+func unpackType(msg []byte, off int) (Type, int, error) {
+ t, o, err := unpackUint16(msg, off)
+ return Type(t), o, err
+}
+
+func skipType(msg []byte, off int) (int, error) {
+ return skipUint16(msg, off)
+}
+
+func packClass(msg []byte, field Class) []byte {
+ return packUint16(msg, uint16(field))
+}
+
+func unpackClass(msg []byte, off int) (Class, int, error) {
+ c, o, err := unpackUint16(msg, off)
+ return Class(c), o, err
+}
+
+func skipClass(msg []byte, off int) (int, error) {
+ return skipUint16(msg, off)
+}
+
+func packUint32(msg []byte, field uint32) []byte {
+ return append(
+ msg,
+ byte(field>>24),
+ byte(field>>16),
+ byte(field>>8),
+ byte(field),
+ )
+}
+
+func unpackUint32(msg []byte, off int) (uint32, int, error) {
+ if off+4 > len(msg) {
+ return 0, off, errBaseLen
+ }
+ v := uint32(msg[off])<<24 | uint32(msg[off+1])<<16 | uint32(msg[off+2])<<8 | uint32(msg[off+3])
+ return v, off + 4, nil
+}
+
+func skipUint32(msg []byte, off int) (int, error) {
+ if off+4 > len(msg) {
+ return off, errBaseLen
+ }
+ return off + 4, nil
+}
+
+func packText(msg []byte, field string) []byte {
+ for len(field) > 0 {
+ l := len(field)
+ if l > 255 {
+ l = 255
+ }
+ msg = append(msg, byte(l))
+ msg = append(msg, field[:l]...)
+ field = field[l:]
+ }
+ return msg
+}
+
+func unpackText(msg []byte, off int) (string, int, error) {
+ if off >= len(msg) {
+ return "", off, errBaseLen
+ }
+ beginOff := off + 1
+ endOff := beginOff + int(msg[off])
+ if endOff > len(msg) {
+ return "", off, errCalcLen
+ }
+ return string(msg[beginOff:endOff]), endOff, nil
+}
+
+func skipText(msg []byte, off int) (int, error) {
+ if off >= len(msg) {
+ return off, errBaseLen
+ }
+ endOff := off + 1 + int(msg[off])
+ if endOff > len(msg) {
+ return off, errCalcLen
+ }
+ return endOff, nil
+}
+
+func packBytes(msg []byte, field []byte) []byte {
+ return append(msg, field...)
+}
+
+func unpackBytes(msg []byte, off int, field []byte) (int, error) {
+ newOff := off + len(field)
+ if newOff > len(msg) {
+ return off, errBaseLen
+ }
+ copy(field, msg[off:newOff])
+ return newOff, nil
+}
+
+func skipBytes(msg []byte, off int, field []byte) (int, error) {
+ newOff := off + len(field)
+ if newOff > len(msg) {
+ return off, errBaseLen
+ }
+ return newOff, nil
+}
+
+// packName packs a domain name.
+//
+// Domain names are a sequence of counted strings split at the dots. They end
+// with a zero-length string. Compression can be used to reuse domain suffixes.
+//
+// The compression map will be updated with new domain suffixes. If compression
+// is nil, compression will not be used.
+func packName(msg []byte, name string, compression map[string]int) ([]byte, error) {
+ oldMsg := msg
+
+ // Add a trailing dot to canonicalize name.
+ if n := len(name); n == 0 || name[n-1] != '.' {
+ name += "."
+ }
+
+ // Allow root domain.
+ if name == "." {
+ return append(msg, 0), nil
+ }
+
+ // Emit sequence of counted strings, chopping at dots.
+ for i, begin := 0, 0; i < len(name); i++ {
+ // Check for the end of the segment.
+ if name[i] == '.' {
+ // The two most significant bits have special meaning.
+ // It isn't allowed for segments to be long enough to
+ // need them.
+ if i-begin >= 1<<6 {
+ return oldMsg, errSegTooLong
+ }
+
+ // Segments must have a non-zero length.
+ if i-begin == 0 {
+ return oldMsg, errZeroSegLen
+ }
+
+ msg = append(msg, byte(i-begin))
+
+ for j := begin; j < i; j++ {
+ msg = append(msg, name[j])
+ }
+
+ begin = i + 1
+ continue
+ }
+
+ // We can only compress domain suffixes starting with a new
+ // segment. A pointer is two bytes with the two most significant
+ // bits set to 1 to indicate that it is a pointer.
+ if (i == 0 || name[i-1] == '.') && compression != nil {
+ if ptr, ok := compression[name[i:]]; ok {
+ // Hit. Emit a pointer instead of the rest of
+ // the domain.
+ return append(msg, byte(ptr>>8|0xC0), byte(ptr)), nil
+ }
+
+ // Miss. Add the suffix to the compression table if the
+ // offset can be stored in the available 14 bytes.
+ if len(msg) <= int(^uint16(0)>>2) {
+ compression[name[i:]] = len(msg)
+ }
+ }
+ }
+ return append(msg, 0), nil
+}
+
+// unpackName unpacks a domain name.
+func unpackName(msg []byte, off int) (string, int, error) {
+ // currOff is the current working offset.
+ currOff := off
+
+ // newOff is the offset where the next record will start. Pointers lead
+ // to data that belongs to other names and thus doesn't count towards to
+ // the usage of this name.
+ newOff := off
+
+ // name is the domain name being unpacked.
+ name := make([]byte, 0, 255)
+
+ // ptr is the number of pointers followed.
+ var ptr int
+Loop:
+ for {
+ if currOff >= len(msg) {
+ return "", off, errBaseLen
+ }
+ c := int(msg[currOff])
+ currOff++
+ switch c & 0xC0 {
+ case 0x00: // String segment
+ if c == 0x00 {
+ // A zero length signals the end of the name.
+ break Loop
+ }
+ endOff := currOff + c
+ if endOff > len(msg) {
+ return "", off, errCalcLen
+ }
+ name = append(name, msg[currOff:endOff]...)
+ name = append(name, '.')
+ currOff = endOff
+ case 0xC0: // Pointer
+ if currOff >= len(msg) {
+ return "", off, errInvalidPtr
+ }
+ c1 := msg[currOff]
+ currOff++
+ if ptr == 0 {
+ newOff = currOff
+ }
+ // Don't follow too many pointers, maybe there's a loop.
+ if ptr++; ptr > 10 {
+ return "", off, errTooManyPtr
+ }
+ currOff = (c^0xC0)<<8 | int(c1)
+ default:
+ // Prefixes 0x80 and 0x40 are reserved.
+ return "", off, errReserved
+ }
+ }
+ if len(name) == 0 {
+ name = append(name, '.')
+ }
+ if ptr == 0 {
+ newOff = currOff
+ }
+ return string(name), newOff, nil
+}
+
+func skipName(msg []byte, off int) (int, error) {
+ // newOff is the offset where the next record will start. Pointers lead
+ // to data that belongs to other names and thus doesn't count towards to
+ // the usage of this name.
+ newOff := off
+
+Loop:
+ for {
+ if newOff >= len(msg) {
+ return off, errBaseLen
+ }
+ c := int(msg[newOff])
+ newOff++
+ switch c & 0xC0 {
+ case 0x00:
+ if c == 0x00 {
+ // A zero length signals the end of the name.
+ break Loop
+ }
+ // literal string
+ newOff += c
+ if newOff > len(msg) {
+ return off, errCalcLen
+ }
+ case 0xC0:
+ // Pointer to somewhere else in msg.
+
+ // Pointers are two bytes.
+ newOff++
+
+ // Don't follow the pointer as the data here has ended.
+ break Loop
+ default:
+ // Prefixes 0x80 and 0x40 are reserved.
+ return off, errReserved
+ }
+ }
+
+ return newOff, nil
+}
+
+// A Question is a DNS query.
+type Question struct {
+ Name string
+ Type Type
+ Class Class
+}
+
+func (q *Question) pack(msg []byte, compression map[string]int) ([]byte, error) {
+ msg, err := packName(msg, q.Name, compression)
+ if err != nil {
+ return msg, &nestedError{"Name", err}
+ }
+ msg = packType(msg, q.Type)
+ return packClass(msg, q.Class), nil
+}
+
+func unpackResource(msg []byte, off int, hdr ResourceHeader) (Resource, int, error) {
+ var (
+ r Resource
+ err error
+ name string
+ )
+ switch hdr.Type {
+ case TypeA:
+ r, err = unpackAResource(hdr, msg, off)
+ name = "A"
+ case TypeNS:
+ r, err = unpackNSResource(hdr, msg, off)
+ name = "NS"
+ case TypeCNAME:
+ r, err = unpackCNAMEResource(hdr, msg, off)
+ name = "CNAME"
+ case TypeSOA:
+ r, err = unpackSOAResource(hdr, msg, off)
+ name = "SOA"
+ case TypePTR:
+ r, err = unpackPTRResource(hdr, msg, off)
+ name = "PTR"
+ case TypeMX:
+ r, err = unpackMXResource(hdr, msg, off)
+ name = "MX"
+ case TypeTXT:
+ r, err = unpackTXTResource(hdr, msg, off)
+ name = "TXT"
+ case TypeAAAA:
+ r, err = unpackAAAAResource(hdr, msg, off)
+ name = "AAAA"
+ case TypeSRV:
+ r, err = unpackSRVResource(hdr, msg, off)
+ name = "SRV"
+ }
+ if err != nil {
+ return nil, off, &nestedError{name + " record", err}
+ }
+ if r != nil {
+ return r, off + int(hdr.Length), nil
+ }
+ return nil, off, errors.New("invalid resource type: " + string(hdr.Type+'0'))
+}
+
+// A CNAMEResource is a CNAME Resource record.
+type CNAMEResource struct {
+ ResourceHeader
+
+ CNAME string
+}
+
+func (r *CNAMEResource) realType() Type {
+ return TypeCNAME
+}
+
+func (r *CNAMEResource) pack(msg []byte, compression map[string]int) ([]byte, error) {
+ return packName(msg, r.CNAME, compression)
+}
+
+func unpackCNAMEResource(hdr ResourceHeader, msg []byte, off int) (*CNAMEResource, error) {
+ cname, _, err := unpackName(msg, off)
+ if err != nil {
+ return nil, err
+ }
+ return &CNAMEResource{hdr, cname}, nil
+}
+
+// An MXResource is an MX Resource record.
+type MXResource struct {
+ ResourceHeader
+
+ Pref uint16
+ MX string
+}
+
+func (r *MXResource) realType() Type {
+ return TypeMX
+}
+
+func (r *MXResource) pack(msg []byte, compression map[string]int) ([]byte, error) {
+ oldMsg := msg
+ msg = packUint16(msg, r.Pref)
+ msg, err := packName(msg, r.MX, compression)
+ if err != nil {
+ return oldMsg, &nestedError{"MXResource.MX", err}
+ }
+ return msg, nil
+}
+
+func unpackMXResource(hdr ResourceHeader, msg []byte, off int) (*MXResource, error) {
+ pref, off, err := unpackUint16(msg, off)
+ if err != nil {
+ return nil, &nestedError{"Pref", err}
+ }
+ mx, _, err := unpackName(msg, off)
+ if err != nil {
+ return nil, &nestedError{"MX", err}
+ }
+ return &MXResource{hdr, pref, mx}, nil
+}
+
+// An NSResource is an NS Resource record.
+type NSResource struct {
+ ResourceHeader
+
+ NS string
+}
+
+func (r *NSResource) realType() Type {
+ return TypeNS
+}
+
+func (r *NSResource) pack(msg []byte, compression map[string]int) ([]byte, error) {
+ return packName(msg, r.NS, compression)
+}
+
+func unpackNSResource(hdr ResourceHeader, msg []byte, off int) (*NSResource, error) {
+ ns, _, err := unpackName(msg, off)
+ if err != nil {
+ return nil, err
+ }
+ return &NSResource{hdr, ns}, nil
+}
+
+// A PTRResource is a PTR Resource record.
+type PTRResource struct {
+ ResourceHeader
+
+ PTR string
+}
+
+func (r *PTRResource) realType() Type {
+ return TypePTR
+}
+
+func (r *PTRResource) pack(msg []byte, compression map[string]int) ([]byte, error) {
+ return packName(msg, r.PTR, compression)
+}
+
+func unpackPTRResource(hdr ResourceHeader, msg []byte, off int) (*PTRResource, error) {
+ ptr, _, err := unpackName(msg, off)
+ if err != nil {
+ return nil, err
+ }
+ return &PTRResource{hdr, ptr}, nil
+}
+
+// An SOAResource is an SOA Resource record.
+type SOAResource struct {
+ ResourceHeader
+
+ NS string
+ MBox string
+ Serial uint32
+ Refresh uint32
+ Retry uint32
+ Expire uint32
+
+ // MinTTL the is the default TTL of Resources records which did not
+ // contain a TTL value and the TTL of negative responses. (RFC 2308
+ // Section 4)
+ MinTTL uint32
+}
+
+func (r *SOAResource) realType() Type {
+ return TypeSOA
+}
+
+func (r *SOAResource) pack(msg []byte, compression map[string]int) ([]byte, error) {
+ oldMsg := msg
+ msg, err := packName(msg, r.NS, compression)
+ if err != nil {
+ return oldMsg, &nestedError{"SOAResource.NS", err}
+ }
+ msg, err = packName(msg, r.MBox, compression)
+ if err != nil {
+ return oldMsg, &nestedError{"SOAResource.MBox", err}
+ }
+ msg = packUint32(msg, r.Serial)
+ msg = packUint32(msg, r.Refresh)
+ msg = packUint32(msg, r.Retry)
+ msg = packUint32(msg, r.Expire)
+ return packUint32(msg, r.MinTTL), nil
+}
+
+func unpackSOAResource(hdr ResourceHeader, msg []byte, off int) (*SOAResource, error) {
+ ns, off, err := unpackName(msg, off)
+ if err != nil {
+ return nil, &nestedError{"NS", err}
+ }
+ mbox, off, err := unpackName(msg, off)
+ if err != nil {
+ return nil, &nestedError{"MBox", err}
+ }
+ serial, off, err := unpackUint32(msg, off)
+ if err != nil {
+ return nil, &nestedError{"Serial", err}
+ }
+ refresh, off, err := unpackUint32(msg, off)
+ if err != nil {
+ return nil, &nestedError{"Refresh", err}
+ }
+ retry, off, err := unpackUint32(msg, off)
+ if err != nil {
+ return nil, &nestedError{"Retry", err}
+ }
+ expire, off, err := unpackUint32(msg, off)
+ if err != nil {
+ return nil, &nestedError{"Expire", err}
+ }
+ minTTL, _, err := unpackUint32(msg, off)
+ if err != nil {
+ return nil, &nestedError{"MinTTL", err}
+ }
+ return &SOAResource{hdr, ns, mbox, serial, refresh, retry, expire, minTTL}, nil
+}
+
+// A TXTResource is a TXT Resource record.
+type TXTResource struct {
+ ResourceHeader
+
+ Txt string // Not a domain name.
+}
+
+func (r *TXTResource) realType() Type {
+ return TypeTXT
+}
+
+func (r *TXTResource) pack(msg []byte, compression map[string]int) ([]byte, error) {
+ return packText(msg, r.Txt), nil
+}
+
+func unpackTXTResource(hdr ResourceHeader, msg []byte, off int) (*TXTResource, error) {
+ var txt string
+ for n := uint16(0); n < hdr.Length; {
+ var t string
+ var err error
+ if t, off, err = unpackText(msg, off); err != nil {
+ return nil, &nestedError{"text", err}
+ }
+ // Check if we got too many bytes.
+ if hdr.Length-n < uint16(len(t))+1 {
+ return nil, errCalcLen
+ }
+ n += uint16(len(t)) + 1
+ txt += t
+ }
+ return &TXTResource{hdr, txt}, nil
+}
+
+// An SRVResource is an SRV Resource record.
+type SRVResource struct {
+ ResourceHeader
+
+ Priority uint16
+ Weight uint16
+ Port uint16
+ Target string // Not compressed as per RFC 2782.
+}
+
+func (r *SRVResource) realType() Type {
+ return TypeSRV
+}
+
+func (r *SRVResource) pack(msg []byte, compression map[string]int) ([]byte, error) {
+ oldMsg := msg
+ msg = packUint16(msg, r.Priority)
+ msg = packUint16(msg, r.Weight)
+ msg = packUint16(msg, r.Port)
+ msg, err := packName(msg, r.Target, nil)
+ if err != nil {
+ return oldMsg, &nestedError{"SRVResource.Target", err}
+ }
+ return msg, nil
+}
+
+func unpackSRVResource(hdr ResourceHeader, msg []byte, off int) (*SRVResource, error) {
+ priority, off, err := unpackUint16(msg, off)
+ if err != nil {
+ return nil, &nestedError{"Priority", err}
+ }
+ weight, off, err := unpackUint16(msg, off)
+ if err != nil {
+ return nil, &nestedError{"Weight", err}
+ }
+ port, off, err := unpackUint16(msg, off)
+ if err != nil {
+ return nil, &nestedError{"Port", err}
+ }
+ target, _, err := unpackName(msg, off)
+ if err != nil {
+ return nil, &nestedError{"Target", err}
+ }
+ return &SRVResource{hdr, priority, weight, port, target}, nil
+}
+
+// An AResource is an A Resource record.
+type AResource struct {
+ ResourceHeader
+
+ A [4]byte
+}
+
+func (r *AResource) realType() Type {
+ return TypeA
+}
+
+func (r *AResource) pack(msg []byte, compression map[string]int) ([]byte, error) {
+ return packBytes(msg, r.A[:]), nil
+}
+
+func unpackAResource(hdr ResourceHeader, msg []byte, off int) (*AResource, error) {
+ var a [4]byte
+ if _, err := unpackBytes(msg, off, a[:]); err != nil {
+ return nil, err
+ }
+ return &AResource{hdr, a}, nil
+}
+
+// An AAAAResource is an AAAA Resource record.
+type AAAAResource struct {
+ ResourceHeader
+
+ AAAA [16]byte
+}
+
+func (r *AAAAResource) realType() Type {
+ return TypeAAAA
+}
+
+func (r *AAAAResource) pack(msg []byte, compression map[string]int) ([]byte, error) {
+ return packBytes(msg, r.AAAA[:]), nil
+}
+
+func unpackAAAAResource(hdr ResourceHeader, msg []byte, off int) (*AAAAResource, error) {
+ var aaaa [16]byte
+ if _, err := unpackBytes(msg, off, aaaa[:]); err != nil {
+ return nil, err
+ }
+ return &AAAAResource{hdr, aaaa}, nil
+}
diff --git a/vendor/golang.org/x/net/dns/dnsmessage/message_test.go b/vendor/golang.org/x/net/dns/dnsmessage/message_test.go
new file mode 100644
index 000000000..46edd7243
--- /dev/null
+++ b/vendor/golang.org/x/net/dns/dnsmessage/message_test.go
@@ -0,0 +1,575 @@
+// Copyright 2009 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package dnsmessage
+
+import (
+ "fmt"
+ "net"
+ "reflect"
+ "strings"
+ "testing"
+)
+
+func (m *Message) String() string {
+ s := fmt.Sprintf("Message: %#v\n", &m.Header)
+ if len(m.Questions) > 0 {
+ s += "-- Questions\n"
+ for _, q := range m.Questions {
+ s += fmt.Sprintf("%#v\n", q)
+ }
+ }
+ if len(m.Answers) > 0 {
+ s += "-- Answers\n"
+ for _, a := range m.Answers {
+ s += fmt.Sprintf("%#v\n", a)
+ }
+ }
+ if len(m.Authorities) > 0 {
+ s += "-- Authorities\n"
+ for _, ns := range m.Authorities {
+ s += fmt.Sprintf("%#v\n", ns)
+ }
+ }
+ if len(m.Additionals) > 0 {
+ s += "-- Additionals\n"
+ for _, e := range m.Additionals {
+ s += fmt.Sprintf("%#v\n", e)
+ }
+ }
+ return s
+}
+
+func TestQuestionPackUnpack(t *testing.T) {
+ want := Question{
+ Name: ".",
+ Type: TypeA,
+ Class: ClassINET,
+ }
+ buf, err := want.pack(make([]byte, 1, 50), map[string]int{})
+ if err != nil {
+ t.Fatal("Packing failed:", err)
+ }
+ var p Parser
+ p.msg = buf
+ p.header.questions = 1
+ p.section = sectionQuestions
+ p.off = 1
+ got, err := p.Question()
+ if err != nil {
+ t.Fatalf("Unpacking failed: %v\n%s", err, string(buf[1:]))
+ }
+ if p.off != len(buf) {
+ t.Errorf("Unpacked different amount than packed: got n = %d, want = %d", p.off, len(buf))
+ }
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("Got = %+v, want = %+v", got, want)
+ }
+}
+
+func TestNamePackUnpack(t *testing.T) {
+ tests := []struct {
+ in string
+ want string
+ err error
+ }{
+ {"", ".", nil},
+ {".", ".", nil},
+ {"google..com", "", errZeroSegLen},
+ {"google.com", "google.com.", nil},
+ {"google..com.", "", errZeroSegLen},
+ {"google.com.", "google.com.", nil},
+ {".google.com.", "", errZeroSegLen},
+ {"www..google.com.", "", errZeroSegLen},
+ {"www.google.com.", "www.google.com.", nil},
+ }
+
+ for _, test := range tests {
+ buf, err := packName(make([]byte, 0, 30), test.in, map[string]int{})
+ if err != test.err {
+ t.Errorf("Packing of %s: got err = %v, want err = %v", test.in, err, test.err)
+ continue
+ }
+ if test.err != nil {
+ continue
+ }
+ got, n, err := unpackName(buf, 0)
+ if err != nil {
+ t.Errorf("Unpacking for %s failed: %v", test.in, err)
+ continue
+ }
+ if n != len(buf) {
+ t.Errorf(
+ "Unpacked different amount than packed for %s: got n = %d, want = %d",
+ test.in,
+ n,
+ len(buf),
+ )
+ }
+ if got != test.want {
+ t.Errorf("Unpacking packing of %s: got = %s, want = %s", test.in, got, test.want)
+ }
+ }
+}
+
+func TestDNSPackUnpack(t *testing.T) {
+ wants := []Message{
+ {
+ Questions: []Question{
+ {
+ Name: ".",
+ Type: TypeAAAA,
+ Class: ClassINET,
+ },
+ },
+ Answers: []Resource{},
+ Authorities: []Resource{},
+ Additionals: []Resource{},
+ },
+ largeTestMsg(),
+ }
+ for i, want := range wants {
+ b, err := want.Pack()
+ if err != nil {
+ t.Fatalf("%d: packing failed: %v", i, err)
+ }
+ var got Message
+ err = got.Unpack(b)
+ if err != nil {
+ t.Fatalf("%d: unpacking failed: %v", i, err)
+ }
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("%d: got = %+v, want = %+v", i, &got, &want)
+ }
+ }
+}
+
+func TestSkipAll(t *testing.T) {
+ msg := largeTestMsg()
+ buf, err := msg.Pack()
+ if err != nil {
+ t.Fatal("Packing large test message:", err)
+ }
+ var p Parser
+ if _, err := p.Start(buf); err != nil {
+ t.Fatal(err)
+ }
+
+ tests := []struct {
+ name string
+ f func() error
+ }{
+ {"SkipAllQuestions", p.SkipAllQuestions},
+ {"SkipAllAnswers", p.SkipAllAnswers},
+ {"SkipAllAuthorities", p.SkipAllAuthorities},
+ {"SkipAllAdditionals", p.SkipAllAdditionals},
+ }
+ for _, test := range tests {
+ for i := 1; i <= 3; i++ {
+ if err := test.f(); err != nil {
+ t.Errorf("Call #%d to %s(): %v", i, test.name, err)
+ }
+ }
+ }
+}
+
+func TestSkipNotStarted(t *testing.T) {
+ var p Parser
+
+ tests := []struct {
+ name string
+ f func() error
+ }{
+ {"SkipAllQuestions", p.SkipAllQuestions},
+ {"SkipAllAnswers", p.SkipAllAnswers},
+ {"SkipAllAuthorities", p.SkipAllAuthorities},
+ {"SkipAllAdditionals", p.SkipAllAdditionals},
+ }
+ for _, test := range tests {
+ if err := test.f(); err != ErrNotStarted {
+ t.Errorf("Got %s() = %v, want = %v", test.name, err, ErrNotStarted)
+ }
+ }
+}
+
+func TestTooManyRecords(t *testing.T) {
+ const recs = int(^uint16(0)) + 1
+ tests := []struct {
+ name string
+ msg Message
+ want error
+ }{
+ {
+ "Questions",
+ Message{
+ Questions: make([]Question, recs),
+ },
+ errTooManyQuestions,
+ },
+ {
+ "Answers",
+ Message{
+ Answers: make([]Resource, recs),
+ },
+ errTooManyAnswers,
+ },
+ {
+ "Authorities",
+ Message{
+ Authorities: make([]Resource, recs),
+ },
+ errTooManyAuthorities,
+ },
+ {
+ "Additionals",
+ Message{
+ Additionals: make([]Resource, recs),
+ },
+ errTooManyAdditionals,
+ },
+ }
+
+ for _, test := range tests {
+ if _, got := test.msg.Pack(); got != test.want {
+ t.Errorf("Packing %d %s: got = %v, want = %v", recs, test.name, got, test.want)
+ }
+ }
+}
+
+func TestVeryLongTxt(t *testing.T) {
+ want := &TXTResource{
+ ResourceHeader: ResourceHeader{
+ Name: "foo.bar.example.com.",
+ Type: TypeTXT,
+ Class: ClassINET,
+ },
+ Txt: loremIpsum,
+ }
+ buf, err := packResource(make([]byte, 0, 8000), want, map[string]int{})
+ if err != nil {
+ t.Fatal("Packing failed:", err)
+ }
+ var hdr ResourceHeader
+ off, err := hdr.unpack(buf, 0)
+ if err != nil {
+ t.Fatal("Unpacking ResourceHeader failed:", err)
+ }
+ got, n, err := unpackResource(buf, off, hdr)
+ if err != nil {
+ t.Fatal("Unpacking failed:", err)
+ }
+ if n != len(buf) {
+ t.Errorf("Unpacked different amount than packed: got n = %d, want = %d", n, len(buf))
+ }
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("Got = %+v, want = %+v", got, want)
+ }
+}
+
+func ExampleHeaderSearch() {
+ msg := Message{
+ Header: Header{Response: true, Authoritative: true},
+ Questions: []Question{
+ {
+ Name: "foo.bar.example.com.",
+ Type: TypeA,
+ Class: ClassINET,
+ },
+ {
+ Name: "bar.example.com.",
+ Type: TypeA,
+ Class: ClassINET,
+ },
+ },
+ Answers: []Resource{
+ &AResource{
+ ResourceHeader: ResourceHeader{
+ Name: "foo.bar.example.com.",
+ Type: TypeA,
+ Class: ClassINET,
+ },
+ A: [4]byte{127, 0, 0, 1},
+ },
+ &AResource{
+ ResourceHeader: ResourceHeader{
+ Name: "bar.example.com.",
+ Type: TypeA,
+ Class: ClassINET,
+ },
+ A: [4]byte{127, 0, 0, 2},
+ },
+ },
+ }
+
+ buf, err := msg.Pack()
+ if err != nil {
+ panic(err)
+ }
+
+ wantName := "bar.example.com."
+
+ var p Parser
+ if _, err := p.Start(buf); err != nil {
+ panic(err)
+ }
+
+ for {
+ q, err := p.Question()
+ if err == ErrSectionDone {
+ break
+ }
+ if err != nil {
+ panic(err)
+ }
+
+ if q.Name != wantName {
+ continue
+ }
+
+ fmt.Println("Found question for name", wantName)
+ if err := p.SkipAllQuestions(); err != nil {
+ panic(err)
+ }
+ break
+ }
+
+ var gotIPs []net.IP
+ for {
+ h, err := p.AnswerHeader()
+ if err == ErrSectionDone {
+ break
+ }
+ if err != nil {
+ panic(err)
+ }
+
+ if (h.Type != TypeA && h.Type != TypeAAAA) || h.Class != ClassINET {
+ continue
+ }
+
+ if !strings.EqualFold(h.Name, wantName) {
+ if err := p.SkipAnswer(); err != nil {
+ panic(err)
+ }
+ continue
+ }
+ a, err := p.Answer()
+ if err != nil {
+ panic(err)
+ }
+
+ switch r := a.(type) {
+ default:
+ panic(fmt.Sprintf("unknown type: %T", r))
+ case *AResource:
+ gotIPs = append(gotIPs, r.A[:])
+ case *AAAAResource:
+ gotIPs = append(gotIPs, r.AAAA[:])
+ }
+ }
+
+ fmt.Printf("Found A/AAAA records for name %s: %v\n", wantName, gotIPs)
+
+ // Output:
+ // Found question for name bar.example.com.
+ // Found A/AAAA records for name bar.example.com.: [127.0.0.2]
+}
+
+func largeTestMsg() Message {
+ return Message{
+ Header: Header{Response: true, Authoritative: true},
+ Questions: []Question{
+ {
+ Name: "foo.bar.example.com.",
+ Type: TypeA,
+ Class: ClassINET,
+ },
+ },
+ Answers: []Resource{
+ &AResource{
+ ResourceHeader: ResourceHeader{
+ Name: "foo.bar.example.com.",
+ Type: TypeA,
+ Class: ClassINET,
+ },
+ A: [4]byte{127, 0, 0, 1},
+ },
+ &AResource{
+ ResourceHeader: ResourceHeader{
+ Name: "foo.bar.example.com.",
+ Type: TypeA,
+ Class: ClassINET,
+ },
+ A: [4]byte{127, 0, 0, 2},
+ },
+ },
+ Authorities: []Resource{
+ &NSResource{
+ ResourceHeader: ResourceHeader{
+ Name: "foo.bar.example.com.",
+ Type: TypeNS,
+ Class: ClassINET,
+ },
+ NS: "ns1.example.com.",
+ },
+ &NSResource{
+ ResourceHeader: ResourceHeader{
+ Name: "foo.bar.example.com.",
+ Type: TypeNS,
+ Class: ClassINET,
+ },
+ NS: "ns2.example.com.",
+ },
+ },
+ Additionals: []Resource{
+ &TXTResource{
+ ResourceHeader: ResourceHeader{
+ Name: "foo.bar.example.com.",
+ Type: TypeTXT,
+ Class: ClassINET,
+ },
+ Txt: "So Long, and Thanks for All the Fish",
+ },
+ &TXTResource{
+ ResourceHeader: ResourceHeader{
+ Name: "foo.bar.example.com.",
+ Type: TypeTXT,
+ Class: ClassINET,
+ },
+ Txt: "Hamster Huey and the Gooey Kablooie",
+ },
+ },
+ }
+}
+
+const loremIpsum = `
+Lorem ipsum dolor sit amet, nec enim antiopam id, an ullum choro
+nonumes qui, pro eu debet honestatis mediocritatem. No alia enim eos,
+magna signiferumque ex vis. Mei no aperiri dissentias, cu vel quas
+regione. Malorum quaeque vim ut, eum cu semper aliquid invidunt, ei
+nam ipsum assentior.
+
+Nostrum appellantur usu no, vis ex probatus adipiscing. Cu usu illum
+facilis eleifend. Iusto conceptam complectitur vim id. Tale omnesque
+no usu, ei oblique sadipscing vim. At nullam voluptua usu, mei laudem
+reformidans et. Qui ei eros porro reformidans, ius suas veritus
+torquatos ex. Mea te facer alterum consequat.
+
+Soleat torquatos democritum sed et, no mea congue appareat, facer
+aliquam nec in. Has te ipsum tritani. At justo dicta option nec, movet
+phaedrum ad nam. Ea detracto verterem liberavisse has, delectus
+suscipiantur in mei. Ex nam meliore complectitur. Ut nam omnis
+honestatis quaerendum, ea mea nihil affert detracto, ad vix rebum
+mollis.
+
+Ut epicurei praesent neglegentur pri, prima fuisset intellegebat ad
+vim. An habemus comprehensam usu, at enim dignissim pro. Eam reque
+vivendum adipisci ea. Vel ne odio choro minimum. Sea admodum
+dissentiet ex. Mundi tamquam evertitur ius cu. Homero postea iisque ut
+pro, vel ne saepe senserit consetetur.
+
+Nulla utamur facilisis ius ea, in viderer diceret pertinax eum. Mei no
+enim quodsi facilisi, ex sed aeterno appareat mediocritatem, eum
+sententiae deterruisset ut. At suas timeam euismod cum, offendit
+appareat interpretaris ne vix. Vel ea civibus albucius, ex vim quidam
+accusata intellegebat, noluisse instructior sea id. Nec te nonumes
+habemus appellantur, quis dignissim vituperata eu nam.
+
+At vix apeirian patrioque vituperatoribus, an usu agam assum. Debet
+iisque an mea. Per eu dicant ponderum accommodare. Pri alienum
+placerat senserit an, ne eum ferri abhorreant vituperatoribus. Ut mea
+eligendi disputationi. Ius no tation everti impedit, ei magna quidam
+mediocritatem pri.
+
+Legendos perpetua iracundia ne usu, no ius ullum epicurei intellegam,
+ad modus epicuri lucilius eam. In unum quaerendum usu. Ne diam paulo
+has, ea veri virtute sed. Alia honestatis conclusionemque mea eu, ut
+iudico albucius his.
+
+Usu essent probatus eu, sed omnis dolor delicatissimi ex. No qui augue
+dissentias dissentiet. Laudem recteque no usu, vel an velit noluisse,
+an sed utinam eirmod appetere. Ne mea fuisset inimicus ocurreret. At
+vis dicant abhorreant, utinam forensibus nec ne, mei te docendi
+consequat. Brute inermis persecuti cum id. Ut ipsum munere propriae
+usu, dicit graeco disputando id has.
+
+Eros dolore quaerendum nam ei. Timeam ornatus inciderint pro id. Nec
+torquatos sadipscing ei, ancillae molestie per in. Malis principes duo
+ea, usu liber postulant ei.
+
+Graece timeam voluptatibus eu eam. Alia probatus quo no, ea scripta
+feugiat duo. Congue option meliore ex qui, noster invenire appellantur
+ea vel. Eu exerci legendos vel. Consetetur repudiandae vim ut. Vix an
+probo minimum, et nam illud falli tempor.
+
+Cum dico signiferumque eu. Sed ut regione maiorum, id veritus insolens
+tacimates vix. Eu mel sint tamquam lucilius, duo no oporteat
+tacimates. Atqui augue concludaturque vix ei, id mel utroque menandri.
+
+Ad oratio blandit aliquando pro. Vis et dolorum rationibus
+philosophia, ad cum nulla molestie. Hinc fuisset adversarium eum et,
+ne qui nisl verear saperet, vel te quaestio forensibus. Per odio
+option delenit an. Alii placerat has no, in pri nihil platonem
+cotidieque. Est ut elit copiosae scaevola, debet tollit maluisset sea
+an.
+
+Te sea hinc debet pericula, liber ridens fabulas cu sed, quem mutat
+accusam mea et. Elitr labitur albucius et pri, an labore feugait mel.
+Velit zril melius usu ea. Ad stet putent interpretaris qui. Mel no
+error volumus scripserit. In pro paulo iudico, quo ei dolorem
+verterem, affert fabellas dissentiet ea vix.
+
+Vis quot deserunt te. Error aliquid detraxit eu usu, vis alia eruditi
+salutatus cu. Est nostrud bonorum an, ei usu alii salutatus. Vel at
+nisl primis, eum ex aperiri noluisse reformidans. Ad veri velit
+utroque vis, ex equidem detraxit temporibus has.
+
+Inermis appareat usu ne. Eros placerat periculis mea ad, in dictas
+pericula pro. Errem postulant at usu, ea nec amet ornatus mentitum. Ad
+mazim graeco eum, vel ex percipit volutpat iudicabit, sit ne delicata
+interesset. Mel sapientem prodesset abhorreant et, oblique suscipit
+eam id.
+
+An maluisset disputando mea, vidit mnesarchum pri et. Malis insolens
+inciderint no sea. Ea persius maluisset vix, ne vim appellantur
+instructior, consul quidam definiebas pri id. Cum integre feugiat
+pericula in, ex sed persius similique, mel ne natum dicit percipitur.
+
+Primis discere ne pri, errem putent definitionem at vis. Ei mel dolore
+neglegentur, mei tincidunt percipitur ei. Pro ad simul integre
+rationibus. Eu vel alii honestatis definitiones, mea no nonumy
+reprehendunt.
+
+Dicta appareat legendos est cu. Eu vel congue dicunt omittam, no vix
+adhuc minimum constituam, quot noluisse id mel. Eu quot sale mutat
+duo, ex nisl munere invenire duo. Ne nec ullum utamur. Pro alterum
+debitis nostrum no, ut vel aliquid vivendo.
+
+Aliquip fierent praesent quo ne, id sit audiam recusabo delicatissimi.
+Usu postulant incorrupte cu. At pro dicit tibique intellegam, cibo
+dolore impedit id eam, et aeque feugait assentior has. Quando sensibus
+nec ex. Possit sensibus pri ad, unum mutat periculis cu vix.
+
+Mundi tibique vix te, duo simul partiendo qualisque id, est at vidit
+sonet tempor. No per solet aeterno deseruisse. Petentium salutandi
+definiebas pri cu. Munere vivendum est in. Ei justo congue eligendi
+vis, modus offendit omittantur te mel.
+
+Integre voluptaria in qui, sit habemus tractatos constituam no. Utinam
+melius conceptam est ne, quo in minimum apeirian delicata, ut ius
+porro recusabo. Dicant expetenda vix no, ludus scripserit sed ex, eu
+his modo nostro. Ut etiam sonet his, quodsi inciderint philosophia te
+per. Nullam lobortis eu cum, vix an sonet efficiendi repudiandae. Vis
+ad idque fabellas intellegebat.
+
+Eum commodo senserit conclusionemque ex. Sed forensibus sadipscing ut,
+mei in facer delicata periculis, sea ne hinc putent cetero. Nec ne
+alia corpora invenire, alia prima soleat te cum. Eleifend posidonium
+nam at.
+
+Dolorum indoctum cu quo, ex dolor legendos recteque eam, cu pri zril
+discere. Nec civibus officiis dissentiunt ex, est te liber ludus
+elaboraret. Cum ea fabellas invenire. Ex vim nostrud eripuit
+comprehensam, nam te inermis delectus, saepe inermis senserit.
+`
diff --git a/vendor/golang.org/x/net/http2/client_conn_pool.go b/vendor/golang.org/x/net/http2/client_conn_pool.go
index b13941258..bdf5652b0 100644
--- a/vendor/golang.org/x/net/http2/client_conn_pool.go
+++ b/vendor/golang.org/x/net/http2/client_conn_pool.go
@@ -247,7 +247,7 @@ func filterOutClientConn(in []*ClientConn, exclude *ClientConn) []*ClientConn {
}
// noDialClientConnPool is an implementation of http2.ClientConnPool
-// which never dials. We let the HTTP/1.1 client dial and use its TLS
+// which never dials. We let the HTTP/1.1 client dial and use its TLS
// connection instead.
type noDialClientConnPool struct{ *clientConnPool }
diff --git a/vendor/golang.org/x/net/http2/databuffer.go b/vendor/golang.org/x/net/http2/databuffer.go
new file mode 100644
index 000000000..a3067f8de
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/databuffer.go
@@ -0,0 +1,146 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package http2
+
+import (
+ "errors"
+ "fmt"
+ "sync"
+)
+
+// Buffer chunks are allocated from a pool to reduce pressure on GC.
+// The maximum wasted space per dataBuffer is 2x the largest size class,
+// which happens when the dataBuffer has multiple chunks and there is
+// one unread byte in both the first and last chunks. We use a few size
+// classes to minimize overheads for servers that typically receive very
+// small request bodies.
+//
+// TODO: Benchmark to determine if the pools are necessary. The GC may have
+// improved enough that we can instead allocate chunks like this:
+// make([]byte, max(16<<10, expectedBytesRemaining))
+var (
+ dataChunkSizeClasses = []int{
+ 1 << 10,
+ 2 << 10,
+ 4 << 10,
+ 8 << 10,
+ 16 << 10,
+ }
+ dataChunkPools = [...]sync.Pool{
+ {New: func() interface{} { return make([]byte, 1<<10) }},
+ {New: func() interface{} { return make([]byte, 2<<10) }},
+ {New: func() interface{} { return make([]byte, 4<<10) }},
+ {New: func() interface{} { return make([]byte, 8<<10) }},
+ {New: func() interface{} { return make([]byte, 16<<10) }},
+ }
+)
+
+func getDataBufferChunk(size int64) []byte {
+ i := 0
+ for ; i < len(dataChunkSizeClasses)-1; i++ {
+ if size <= int64(dataChunkSizeClasses[i]) {
+ break
+ }
+ }
+ return dataChunkPools[i].Get().([]byte)
+}
+
+func putDataBufferChunk(p []byte) {
+ for i, n := range dataChunkSizeClasses {
+ if len(p) == n {
+ dataChunkPools[i].Put(p)
+ return
+ }
+ }
+ panic(fmt.Sprintf("unexpected buffer len=%v", len(p)))
+}
+
+// dataBuffer is an io.ReadWriter backed by a list of data chunks.
+// Each dataBuffer is used to read DATA frames on a single stream.
+// The buffer is divided into chunks so the server can limit the
+// total memory used by a single connection without limiting the
+// request body size on any single stream.
+type dataBuffer struct {
+ chunks [][]byte
+ r int // next byte to read is chunks[0][r]
+ w int // next byte to write is chunks[len(chunks)-1][w]
+ size int // total buffered bytes
+ expected int64 // we expect at least this many bytes in future Write calls (ignored if <= 0)
+}
+
+var errReadEmpty = errors.New("read from empty dataBuffer")
+
+// Read copies bytes from the buffer into p.
+// It is an error to read when no data is available.
+func (b *dataBuffer) Read(p []byte) (int, error) {
+ if b.size == 0 {
+ return 0, errReadEmpty
+ }
+ var ntotal int
+ for len(p) > 0 && b.size > 0 {
+ readFrom := b.bytesFromFirstChunk()
+ n := copy(p, readFrom)
+ p = p[n:]
+ ntotal += n
+ b.r += n
+ b.size -= n
+ // If the first chunk has been consumed, advance to the next chunk.
+ if b.r == len(b.chunks[0]) {
+ putDataBufferChunk(b.chunks[0])
+ end := len(b.chunks) - 1
+ copy(b.chunks[:end], b.chunks[1:])
+ b.chunks[end] = nil
+ b.chunks = b.chunks[:end]
+ b.r = 0
+ }
+ }
+ return ntotal, nil
+}
+
+func (b *dataBuffer) bytesFromFirstChunk() []byte {
+ if len(b.chunks) == 1 {
+ return b.chunks[0][b.r:b.w]
+ }
+ return b.chunks[0][b.r:]
+}
+
+// Len returns the number of bytes of the unread portion of the buffer.
+func (b *dataBuffer) Len() int {
+ return b.size
+}
+
+// Write appends p to the buffer.
+func (b *dataBuffer) Write(p []byte) (int, error) {
+ ntotal := len(p)
+ for len(p) > 0 {
+ // If the last chunk is empty, allocate a new chunk. Try to allocate
+ // enough to fully copy p plus any additional bytes we expect to
+ // receive. However, this may allocate less than len(p).
+ want := int64(len(p))
+ if b.expected > want {
+ want = b.expected
+ }
+ chunk := b.lastChunkOrAlloc(want)
+ n := copy(chunk[b.w:], p)
+ p = p[n:]
+ b.w += n
+ b.size += n
+ b.expected -= int64(n)
+ }
+ return ntotal, nil
+}
+
+func (b *dataBuffer) lastChunkOrAlloc(want int64) []byte {
+ if len(b.chunks) != 0 {
+ last := b.chunks[len(b.chunks)-1]
+ if b.w < len(last) {
+ return last
+ }
+ }
+ chunk := getDataBufferChunk(want)
+ b.chunks = append(b.chunks, chunk)
+ b.w = 0
+ return chunk
+}
diff --git a/vendor/golang.org/x/net/http2/databuffer_test.go b/vendor/golang.org/x/net/http2/databuffer_test.go
new file mode 100644
index 000000000..ca227b528
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/databuffer_test.go
@@ -0,0 +1,155 @@
+// 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 http2
+
+import (
+ "bytes"
+ "fmt"
+ "reflect"
+ "testing"
+)
+
+func fmtDataChunk(chunk []byte) string {
+ out := ""
+ var last byte
+ var count int
+ for _, c := range chunk {
+ if c != last {
+ if count > 0 {
+ out += fmt.Sprintf(" x %d ", count)
+ count = 0
+ }
+ out += string([]byte{c})
+ last = c
+ }
+ count++
+ }
+ if count > 0 {
+ out += fmt.Sprintf(" x %d", count)
+ }
+ return out
+}
+
+func fmtDataChunks(chunks [][]byte) string {
+ var out string
+ for _, chunk := range chunks {
+ out += fmt.Sprintf("{%q}", fmtDataChunk(chunk))
+ }
+ return out
+}
+
+func testDataBuffer(t *testing.T, wantBytes []byte, setup func(t *testing.T) *dataBuffer) {
+ // Run setup, then read the remaining bytes from the dataBuffer and check
+ // that they match wantBytes. We use different read sizes to check corner
+ // cases in Read.
+ for _, readSize := range []int{1, 2, 1 * 1024, 32 * 1024} {
+ t.Run(fmt.Sprintf("ReadSize=%d", readSize), func(t *testing.T) {
+ b := setup(t)
+ buf := make([]byte, readSize)
+ var gotRead bytes.Buffer
+ for {
+ n, err := b.Read(buf)
+ gotRead.Write(buf[:n])
+ if err == errReadEmpty {
+ break
+ }
+ if err != nil {
+ t.Fatalf("error after %v bytes: %v", gotRead.Len(), err)
+ }
+ }
+ if got, want := gotRead.Bytes(), wantBytes; !bytes.Equal(got, want) {
+ t.Errorf("FinalRead=%q, want %q", fmtDataChunk(got), fmtDataChunk(want))
+ }
+ })
+ }
+}
+
+func TestDataBufferAllocation(t *testing.T) {
+ writes := [][]byte{
+ bytes.Repeat([]byte("a"), 1*1024-1),
+ []byte{'a'},
+ bytes.Repeat([]byte("b"), 4*1024-1),
+ []byte{'b'},
+ bytes.Repeat([]byte("c"), 8*1024-1),
+ []byte{'c'},
+ bytes.Repeat([]byte("d"), 16*1024-1),
+ []byte{'d'},
+ bytes.Repeat([]byte("e"), 32*1024),
+ }
+ var wantRead bytes.Buffer
+ for _, p := range writes {
+ wantRead.Write(p)
+ }
+
+ testDataBuffer(t, wantRead.Bytes(), func(t *testing.T) *dataBuffer {
+ b := &dataBuffer{}
+ for _, p := range writes {
+ if n, err := b.Write(p); n != len(p) || err != nil {
+ t.Fatalf("Write(%q x %d)=%v,%v want %v,nil", p[:1], len(p), n, err, len(p))
+ }
+ }
+ want := [][]byte{
+ bytes.Repeat([]byte("a"), 1*1024),
+ bytes.Repeat([]byte("b"), 4*1024),
+ bytes.Repeat([]byte("c"), 8*1024),
+ bytes.Repeat([]byte("d"), 16*1024),
+ bytes.Repeat([]byte("e"), 16*1024),
+ bytes.Repeat([]byte("e"), 16*1024),
+ }
+ if !reflect.DeepEqual(b.chunks, want) {
+ t.Errorf("dataBuffer.chunks\ngot: %s\nwant: %s", fmtDataChunks(b.chunks), fmtDataChunks(want))
+ }
+ return b
+ })
+}
+
+func TestDataBufferAllocationWithExpected(t *testing.T) {
+ writes := [][]byte{
+ bytes.Repeat([]byte("a"), 1*1024), // allocates 16KB
+ bytes.Repeat([]byte("b"), 14*1024),
+ bytes.Repeat([]byte("c"), 15*1024), // allocates 16KB more
+ bytes.Repeat([]byte("d"), 2*1024),
+ bytes.Repeat([]byte("e"), 1*1024), // overflows 32KB expectation, allocates just 1KB
+ }
+ var wantRead bytes.Buffer
+ for _, p := range writes {
+ wantRead.Write(p)
+ }
+
+ testDataBuffer(t, wantRead.Bytes(), func(t *testing.T) *dataBuffer {
+ b := &dataBuffer{expected: 32 * 1024}
+ for _, p := range writes {
+ if n, err := b.Write(p); n != len(p) || err != nil {
+ t.Fatalf("Write(%q x %d)=%v,%v want %v,nil", p[:1], len(p), n, err, len(p))
+ }
+ }
+ want := [][]byte{
+ append(bytes.Repeat([]byte("a"), 1*1024), append(bytes.Repeat([]byte("b"), 14*1024), bytes.Repeat([]byte("c"), 1*1024)...)...),
+ append(bytes.Repeat([]byte("c"), 14*1024), bytes.Repeat([]byte("d"), 2*1024)...),
+ bytes.Repeat([]byte("e"), 1*1024),
+ }
+ if !reflect.DeepEqual(b.chunks, want) {
+ t.Errorf("dataBuffer.chunks\ngot: %s\nwant: %s", fmtDataChunks(b.chunks), fmtDataChunks(want))
+ }
+ return b
+ })
+}
+
+func TestDataBufferWriteAfterPartialRead(t *testing.T) {
+ testDataBuffer(t, []byte("cdxyz"), func(t *testing.T) *dataBuffer {
+ b := &dataBuffer{}
+ if n, err := b.Write([]byte("abcd")); n != 4 || err != nil {
+ t.Fatalf("Write(\"abcd\")=%v,%v want 4,nil", n, err)
+ }
+ p := make([]byte, 2)
+ if n, err := b.Read(p); n != 2 || err != nil || !bytes.Equal(p, []byte("ab")) {
+ t.Fatalf("Read()=%q,%v,%v want \"ab\",2,nil", p, n, err)
+ }
+ if n, err := b.Write([]byte("xyz")); n != 3 || err != nil {
+ t.Fatalf("Write(\"xyz\")=%v,%v want 3,nil", n, err)
+ }
+ return b
+ })
+}
diff --git a/vendor/golang.org/x/net/http2/fixed_buffer.go b/vendor/golang.org/x/net/http2/fixed_buffer.go
deleted file mode 100644
index 47da0f0bf..000000000
--- a/vendor/golang.org/x/net/http2/fixed_buffer.go
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright 2014 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package http2
-
-import (
- "errors"
-)
-
-// fixedBuffer is an io.ReadWriter backed by a fixed size buffer.
-// It never allocates, but moves old data as new data is written.
-type fixedBuffer struct {
- buf []byte
- r, w int
-}
-
-var (
- errReadEmpty = errors.New("read from empty fixedBuffer")
- errWriteFull = errors.New("write on full fixedBuffer")
-)
-
-// Read copies bytes from the buffer into p.
-// It is an error to read when no data is available.
-func (b *fixedBuffer) Read(p []byte) (n int, err error) {
- if b.r == b.w {
- return 0, errReadEmpty
- }
- n = copy(p, b.buf[b.r:b.w])
- b.r += n
- if b.r == b.w {
- b.r = 0
- b.w = 0
- }
- return n, nil
-}
-
-// Len returns the number of bytes of the unread portion of the buffer.
-func (b *fixedBuffer) Len() int {
- return b.w - b.r
-}
-
-// Write copies bytes from p into the buffer.
-// It is an error to write more data than the buffer can hold.
-func (b *fixedBuffer) Write(p []byte) (n int, err error) {
- // Slide existing data to beginning.
- if b.r > 0 && len(p) > len(b.buf)-b.w {
- copy(b.buf, b.buf[b.r:b.w])
- b.w -= b.r
- b.r = 0
- }
-
- // Write new data.
- n = copy(b.buf[b.w:], p)
- b.w += n
- if n < len(p) {
- err = errWriteFull
- }
- return n, err
-}
diff --git a/vendor/golang.org/x/net/http2/fixed_buffer_test.go b/vendor/golang.org/x/net/http2/fixed_buffer_test.go
deleted file mode 100644
index f5432f8d8..000000000
--- a/vendor/golang.org/x/net/http2/fixed_buffer_test.go
+++ /dev/null
@@ -1,128 +0,0 @@
-// Copyright 2014 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package http2
-
-import (
- "reflect"
- "testing"
-)
-
-var bufferReadTests = []struct {
- buf fixedBuffer
- read, wn int
- werr error
- wp []byte
- wbuf fixedBuffer
-}{
- {
- fixedBuffer{[]byte{'a', 0}, 0, 1},
- 5, 1, nil, []byte{'a'},
- fixedBuffer{[]byte{'a', 0}, 0, 0},
- },
- {
- fixedBuffer{[]byte{0, 'a'}, 1, 2},
- 5, 1, nil, []byte{'a'},
- fixedBuffer{[]byte{0, 'a'}, 0, 0},
- },
- {
- fixedBuffer{[]byte{'a', 'b'}, 0, 2},
- 1, 1, nil, []byte{'a'},
- fixedBuffer{[]byte{'a', 'b'}, 1, 2},
- },
- {
- fixedBuffer{[]byte{}, 0, 0},
- 5, 0, errReadEmpty, []byte{},
- fixedBuffer{[]byte{}, 0, 0},
- },
-}
-
-func TestBufferRead(t *testing.T) {
- for i, tt := range bufferReadTests {
- read := make([]byte, tt.read)
- n, err := tt.buf.Read(read)
- if n != tt.wn {
- t.Errorf("#%d: wn = %d want %d", i, n, tt.wn)
- continue
- }
- if err != tt.werr {
- t.Errorf("#%d: werr = %v want %v", i, err, tt.werr)
- continue
- }
- read = read[:n]
- if !reflect.DeepEqual(read, tt.wp) {
- t.Errorf("#%d: read = %+v want %+v", i, read, tt.wp)
- }
- if !reflect.DeepEqual(tt.buf, tt.wbuf) {
- t.Errorf("#%d: buf = %+v want %+v", i, tt.buf, tt.wbuf)
- }
- }
-}
-
-var bufferWriteTests = []struct {
- buf fixedBuffer
- write, wn int
- werr error
- wbuf fixedBuffer
-}{
- {
- buf: fixedBuffer{
- buf: []byte{},
- },
- wbuf: fixedBuffer{
- buf: []byte{},
- },
- },
- {
- buf: fixedBuffer{
- buf: []byte{1, 'a'},
- },
- write: 1,
- wn: 1,
- wbuf: fixedBuffer{
- buf: []byte{0, 'a'},
- w: 1,
- },
- },
- {
- buf: fixedBuffer{
- buf: []byte{'a', 1},
- r: 1,
- w: 1,
- },
- write: 2,
- wn: 2,
- wbuf: fixedBuffer{
- buf: []byte{0, 0},
- w: 2,
- },
- },
- {
- buf: fixedBuffer{
- buf: []byte{},
- },
- write: 5,
- werr: errWriteFull,
- wbuf: fixedBuffer{
- buf: []byte{},
- },
- },
-}
-
-func TestBufferWrite(t *testing.T) {
- for i, tt := range bufferWriteTests {
- n, err := tt.buf.Write(make([]byte, tt.write))
- if n != tt.wn {
- t.Errorf("#%d: wrote %d bytes; want %d", i, n, tt.wn)
- continue
- }
- if err != tt.werr {
- t.Errorf("#%d: error = %v; want %v", i, err, tt.werr)
- continue
- }
- if !reflect.DeepEqual(tt.buf, tt.wbuf) {
- t.Errorf("#%d: buf = %+v; want %+v", i, tt.buf, tt.wbuf)
- }
- }
-}
diff --git a/vendor/golang.org/x/net/http2/frame.go b/vendor/golang.org/x/net/http2/frame.go
index 358833fed..3b1489072 100644
--- a/vendor/golang.org/x/net/http2/frame.go
+++ b/vendor/golang.org/x/net/http2/frame.go
@@ -122,7 +122,7 @@ var flagName = map[FrameType]map[Flags]string{
// a frameParser parses a frame given its FrameHeader and payload
// bytes. The length of payload will always equal fh.Length (which
// might be 0).
-type frameParser func(fh FrameHeader, payload []byte) (Frame, error)
+type frameParser func(fc *frameCache, fh FrameHeader, payload []byte) (Frame, error)
var frameParsers = map[FrameType]frameParser{
FrameData: parseDataFrame,
@@ -312,7 +312,7 @@ type Framer struct {
MaxHeaderListSize uint32
// TODO: track which type of frame & with which flags was sent
- // last. Then return an error (unless AllowIllegalWrites) if
+ // last. Then return an error (unless AllowIllegalWrites) if
// we're in the middle of a header block and a
// non-Continuation or Continuation on a different stream is
// attempted to be written.
@@ -323,6 +323,8 @@ type Framer struct {
debugFramerBuf *bytes.Buffer
debugReadLoggerf func(string, ...interface{})
debugWriteLoggerf func(string, ...interface{})
+
+ frameCache *frameCache // nil if frames aren't reused (default)
}
func (fr *Framer) maxHeaderListSize() uint32 {
@@ -398,6 +400,27 @@ const (
maxFrameSize = 1<<24 - 1
)
+// SetReuseFrames allows the Framer to reuse Frames.
+// If called on a Framer, Frames returned by calls to ReadFrame are only
+// valid until the next call to ReadFrame.
+func (fr *Framer) SetReuseFrames() {
+ if fr.frameCache != nil {
+ return
+ }
+ fr.frameCache = &frameCache{}
+}
+
+type frameCache struct {
+ dataFrame DataFrame
+}
+
+func (fc *frameCache) getDataFrame() *DataFrame {
+ if fc == nil {
+ return &DataFrame{}
+ }
+ return &fc.dataFrame
+}
+
// NewFramer returns a Framer that writes frames to w and reads them from r.
func NewFramer(w io.Writer, r io.Reader) *Framer {
fr := &Framer{
@@ -477,7 +500,7 @@ func (fr *Framer) ReadFrame() (Frame, error) {
if _, err := io.ReadFull(fr.r, payload); err != nil {
return nil, err
}
- f, err := typeFrameParser(fh.Type)(fh, payload)
+ f, err := typeFrameParser(fh.Type)(fr.frameCache, fh, payload)
if err != nil {
if ce, ok := err.(connError); ok {
return nil, fr.connError(ce.Code, ce.Reason)
@@ -565,7 +588,7 @@ func (f *DataFrame) Data() []byte {
return f.data
}
-func parseDataFrame(fh FrameHeader, payload []byte) (Frame, error) {
+func parseDataFrame(fc *frameCache, fh FrameHeader, payload []byte) (Frame, error) {
if fh.StreamID == 0 {
// DATA frames MUST be associated with a stream. If a
// DATA frame is received whose stream identifier
@@ -574,9 +597,9 @@ func parseDataFrame(fh FrameHeader, payload []byte) (Frame, error) {
// PROTOCOL_ERROR.
return nil, connError{ErrCodeProtocol, "DATA frame with stream ID 0"}
}
- f := &DataFrame{
- FrameHeader: fh,
- }
+ f := fc.getDataFrame()
+ f.FrameHeader = fh
+
var padSize byte
if fh.Flags.Has(FlagDataPadded) {
var err error
@@ -600,6 +623,7 @@ var (
errStreamID = errors.New("invalid stream ID")
errDepStreamID = errors.New("invalid dependent stream ID")
errPadLength = errors.New("pad length too large")
+ errPadBytes = errors.New("padding bytes must all be zeros unless AllowIllegalWrites is enabled")
)
func validStreamIDOrZero(streamID uint32) bool {
@@ -623,6 +647,7 @@ func (f *Framer) WriteData(streamID uint32, endStream bool, data []byte) error {
//
// If pad is nil, the padding bit is not sent.
// The length of pad must not exceed 255 bytes.
+// The bytes of pad must all be zero, unless f.AllowIllegalWrites is set.
//
// It will perform exactly one Write to the underlying Writer.
// It is the caller's responsibility not to violate the maximum frame size
@@ -631,8 +656,18 @@ func (f *Framer) WriteDataPadded(streamID uint32, endStream bool, data, pad []by
if !validStreamID(streamID) && !f.AllowIllegalWrites {
return errStreamID
}
- if len(pad) > 255 {
- return errPadLength
+ if len(pad) > 0 {
+ if len(pad) > 255 {
+ return errPadLength
+ }
+ if !f.AllowIllegalWrites {
+ for _, b := range pad {
+ if b != 0 {
+ // "Padding octets MUST be set to zero when sending."
+ return errPadBytes
+ }
+ }
+ }
}
var flags Flags
if endStream {
@@ -660,10 +695,10 @@ type SettingsFrame struct {
p []byte
}
-func parseSettingsFrame(fh FrameHeader, p []byte) (Frame, error) {
+func parseSettingsFrame(_ *frameCache, fh FrameHeader, p []byte) (Frame, error) {
if fh.Flags.Has(FlagSettingsAck) && fh.Length > 0 {
// When this (ACK 0x1) bit is set, the payload of the
- // SETTINGS frame MUST be empty. Receipt of a
+ // SETTINGS frame MUST be empty. Receipt of a
// SETTINGS frame with the ACK flag set and a length
// field value other than 0 MUST be treated as a
// connection error (Section 5.4.1) of type
@@ -672,7 +707,7 @@ func parseSettingsFrame(fh FrameHeader, p []byte) (Frame, error) {
}
if fh.StreamID != 0 {
// SETTINGS frames always apply to a connection,
- // never a single stream. The stream identifier for a
+ // never a single stream. The stream identifier for a
// SETTINGS frame MUST be zero (0x0). If an endpoint
// receives a SETTINGS frame whose stream identifier
// field is anything other than 0x0, the endpoint MUST
@@ -762,7 +797,7 @@ type PingFrame struct {
func (f *PingFrame) IsAck() bool { return f.Flags.Has(FlagPingAck) }
-func parsePingFrame(fh FrameHeader, payload []byte) (Frame, error) {
+func parsePingFrame(_ *frameCache, fh FrameHeader, payload []byte) (Frame, error) {
if len(payload) != 8 {
return nil, ConnectionError(ErrCodeFrameSize)
}
@@ -802,7 +837,7 @@ func (f *GoAwayFrame) DebugData() []byte {
return f.debugData
}
-func parseGoAwayFrame(fh FrameHeader, p []byte) (Frame, error) {
+func parseGoAwayFrame(_ *frameCache, fh FrameHeader, p []byte) (Frame, error) {
if fh.StreamID != 0 {
return nil, ConnectionError(ErrCodeProtocol)
}
@@ -842,7 +877,7 @@ func (f *UnknownFrame) Payload() []byte {
return f.p
}
-func parseUnknownFrame(fh FrameHeader, p []byte) (Frame, error) {
+func parseUnknownFrame(_ *frameCache, fh FrameHeader, p []byte) (Frame, error) {
return &UnknownFrame{fh, p}, nil
}
@@ -853,7 +888,7 @@ type WindowUpdateFrame struct {
Increment uint32 // never read with high bit set
}
-func parseWindowUpdateFrame(fh FrameHeader, p []byte) (Frame, error) {
+func parseWindowUpdateFrame(_ *frameCache, fh FrameHeader, p []byte) (Frame, error) {
if len(p) != 4 {
return nil, ConnectionError(ErrCodeFrameSize)
}
@@ -918,12 +953,12 @@ func (f *HeadersFrame) HasPriority() bool {
return f.FrameHeader.Flags.Has(FlagHeadersPriority)
}
-func parseHeadersFrame(fh FrameHeader, p []byte) (_ Frame, err error) {
+func parseHeadersFrame(_ *frameCache, fh FrameHeader, p []byte) (_ Frame, err error) {
hf := &HeadersFrame{
FrameHeader: fh,
}
if fh.StreamID == 0 {
- // HEADERS frames MUST be associated with a stream. If a HEADERS frame
+ // HEADERS frames MUST be associated with a stream. If a HEADERS frame
// is received whose stream identifier field is 0x0, the recipient MUST
// respond with a connection error (Section 5.4.1) of type
// PROTOCOL_ERROR.
@@ -1045,7 +1080,7 @@ type PriorityParam struct {
Exclusive bool
// Weight is the stream's zero-indexed weight. It should be
- // set together with StreamDep, or neither should be set. Per
+ // set together with StreamDep, or neither should be set. Per
// the spec, "Add one to the value to obtain a weight between
// 1 and 256."
Weight uint8
@@ -1055,7 +1090,7 @@ func (p PriorityParam) IsZero() bool {
return p == PriorityParam{}
}
-func parsePriorityFrame(fh FrameHeader, payload []byte) (Frame, error) {
+func parsePriorityFrame(_ *frameCache, fh FrameHeader, payload []byte) (Frame, error) {
if fh.StreamID == 0 {
return nil, connError{ErrCodeProtocol, "PRIORITY frame with stream ID 0"}
}
@@ -1102,7 +1137,7 @@ type RSTStreamFrame struct {
ErrCode ErrCode
}
-func parseRSTStreamFrame(fh FrameHeader, p []byte) (Frame, error) {
+func parseRSTStreamFrame(_ *frameCache, fh FrameHeader, p []byte) (Frame, error) {
if len(p) != 4 {
return nil, ConnectionError(ErrCodeFrameSize)
}
@@ -1132,7 +1167,7 @@ type ContinuationFrame struct {
headerFragBuf []byte
}
-func parseContinuationFrame(fh FrameHeader, p []byte) (Frame, error) {
+func parseContinuationFrame(_ *frameCache, fh FrameHeader, p []byte) (Frame, error) {
if fh.StreamID == 0 {
return nil, connError{ErrCodeProtocol, "CONTINUATION frame with stream ID 0"}
}
@@ -1182,7 +1217,7 @@ func (f *PushPromiseFrame) HeadersEnded() bool {
return f.FrameHeader.Flags.Has(FlagPushPromiseEndHeaders)
}
-func parsePushPromise(fh FrameHeader, p []byte) (_ Frame, err error) {
+func parsePushPromise(_ *frameCache, fh FrameHeader, p []byte) (_ Frame, err error) {
pp := &PushPromiseFrame{
FrameHeader: fh,
}
diff --git a/vendor/golang.org/x/net/http2/frame_test.go b/vendor/golang.org/x/net/http2/frame_test.go
index 7b1933d96..37266bc58 100644
--- a/vendor/golang.org/x/net/http2/frame_test.go
+++ b/vendor/golang.org/x/net/http2/frame_test.go
@@ -141,7 +141,7 @@ func TestWriteDataPadded(t *testing.T) {
streamID: 1,
endStream: false,
data: []byte("foo"),
- pad: []byte("bar"),
+ pad: []byte{0, 0, 0},
wantHeader: FrameHeader{
Type: FrameData,
Flags: FlagDataPadded,
@@ -1096,6 +1096,95 @@ func TestMetaFrameHeader(t *testing.T) {
}
}
+func TestSetReuseFrames(t *testing.T) {
+ fr, buf := testFramer()
+ fr.SetReuseFrames()
+
+ // Check that DataFrames are reused. Note that
+ // SetReuseFrames only currently implements reuse of DataFrames.
+ firstDf := readAndVerifyDataFrame("ABC", 3, fr, buf, t)
+
+ for i := 0; i < 10; i++ {
+ df := readAndVerifyDataFrame("XYZ", 3, fr, buf, t)
+ if df != firstDf {
+ t.Errorf("Expected Framer to return references to the same DataFrame. Have %v and %v", &df, &firstDf)
+ }
+ }
+
+ for i := 0; i < 10; i++ {
+ df := readAndVerifyDataFrame("", 0, fr, buf, t)
+ if df != firstDf {
+ t.Errorf("Expected Framer to return references to the same DataFrame. Have %v and %v", &df, &firstDf)
+ }
+ }
+
+ for i := 0; i < 10; i++ {
+ df := readAndVerifyDataFrame("HHH", 3, fr, buf, t)
+ if df != firstDf {
+ t.Errorf("Expected Framer to return references to the same DataFrame. Have %v and %v", &df, &firstDf)
+ }
+ }
+}
+
+func TestSetReuseFramesMoreThanOnce(t *testing.T) {
+ fr, buf := testFramer()
+ fr.SetReuseFrames()
+
+ firstDf := readAndVerifyDataFrame("ABC", 3, fr, buf, t)
+ fr.SetReuseFrames()
+
+ for i := 0; i < 10; i++ {
+ df := readAndVerifyDataFrame("XYZ", 3, fr, buf, t)
+ // SetReuseFrames should be idempotent
+ fr.SetReuseFrames()
+ if df != firstDf {
+ t.Errorf("Expected Framer to return references to the same DataFrame. Have %v and %v", &df, &firstDf)
+ }
+ }
+}
+
+func TestNoSetReuseFrames(t *testing.T) {
+ fr, buf := testFramer()
+ const numNewDataFrames = 10
+ dfSoFar := make([]interface{}, numNewDataFrames)
+
+ // Check that DataFrames are not reused if SetReuseFrames wasn't called.
+ // SetReuseFrames only currently implements reuse of DataFrames.
+ for i := 0; i < numNewDataFrames; i++ {
+ df := readAndVerifyDataFrame("XYZ", 3, fr, buf, t)
+ for _, item := range dfSoFar {
+ if df == item {
+ t.Errorf("Expected Framer to return new DataFrames since SetNoReuseFrames not set.")
+ }
+ }
+ dfSoFar[i] = df
+ }
+}
+
+func readAndVerifyDataFrame(data string, length byte, fr *Framer, buf *bytes.Buffer, t *testing.T) *DataFrame {
+ var streamID uint32 = 1<<24 + 2<<16 + 3<<8 + 4
+ fr.WriteData(streamID, true, []byte(data))
+ wantEnc := "\x00\x00" + string(length) + "\x00\x01\x01\x02\x03\x04" + data
+ if buf.String() != wantEnc {
+ t.Errorf("encoded as %q; want %q", buf.Bytes(), wantEnc)
+ }
+ f, err := fr.ReadFrame()
+ if err != nil {
+ t.Fatal(err)
+ }
+ df, ok := f.(*DataFrame)
+ if !ok {
+ t.Fatalf("got %T; want *DataFrame", f)
+ }
+ if !bytes.Equal(df.Data(), []byte(data)) {
+ t.Errorf("got %q; want %q", df.Data(), []byte(data))
+ }
+ if f.Header().Flags&1 == 0 {
+ t.Errorf("didn't see END_STREAM flag")
+ }
+ return df
+}
+
func encodeHeaderRaw(t *testing.T, pairs ...string) []byte {
var he hpackEncoder
return he.encodeHeaderRaw(t, pairs...)
diff --git a/vendor/golang.org/x/net/http2/go18.go b/vendor/golang.org/x/net/http2/go18.go
index 633202c39..73cc2381f 100644
--- a/vendor/golang.org/x/net/http2/go18.go
+++ b/vendor/golang.org/x/net/http2/go18.go
@@ -12,7 +12,11 @@ import (
"net/http"
)
-func cloneTLSConfig(c *tls.Config) *tls.Config { return c.Clone() }
+func cloneTLSConfig(c *tls.Config) *tls.Config {
+ c2 := c.Clone()
+ c2.GetClientCertificate = c.GetClientCertificate // golang.org/issue/19264
+ return c2
+}
var _ http.Pusher = (*responseWriter)(nil)
diff --git a/vendor/golang.org/x/net/http2/go18_test.go b/vendor/golang.org/x/net/http2/go18_test.go
index 836550597..30e3b038b 100644
--- a/vendor/golang.org/x/net/http2/go18_test.go
+++ b/vendor/golang.org/x/net/http2/go18_test.go
@@ -7,6 +7,7 @@
package http2
import (
+ "crypto/tls"
"net/http"
"testing"
"time"
@@ -64,3 +65,15 @@ func TestConfigureServerIdleTimeout_Go18(t *testing.T) {
}
}
}
+
+func TestCertClone(t *testing.T) {
+ c := &tls.Config{
+ GetClientCertificate: func(*tls.CertificateRequestInfo) (*tls.Certificate, error) {
+ panic("shouldn't be called")
+ },
+ }
+ c2 := cloneTLSConfig(c)
+ if c2.GetClientCertificate == nil {
+ t.Error("GetClientCertificate is nil")
+ }
+}
diff --git a/vendor/golang.org/x/net/http2/hpack/encode.go b/vendor/golang.org/x/net/http2/hpack/encode.go
index f9bb03398..54726c2a3 100644
--- a/vendor/golang.org/x/net/http2/hpack/encode.go
+++ b/vendor/golang.org/x/net/http2/hpack/encode.go
@@ -39,13 +39,14 @@ func NewEncoder(w io.Writer) *Encoder {
tableSizeUpdate: false,
w: w,
}
+ e.dynTab.table.init()
e.dynTab.setMaxSize(initialHeaderTableSize)
return e
}
// WriteField encodes f into a single Write to e's underlying Writer.
// This function may also produce bytes for "Header Table Size Update"
-// if necessary. If produced, it is done before encoding f.
+// if necessary. If produced, it is done before encoding f.
func (e *Encoder) WriteField(f HeaderField) error {
e.buf = e.buf[:0]
@@ -88,29 +89,17 @@ func (e *Encoder) WriteField(f HeaderField) error {
// only name matches, i points to that index and nameValueMatch
// becomes false.
func (e *Encoder) searchTable(f HeaderField) (i uint64, nameValueMatch bool) {
- for idx, hf := range staticTable {
- if !constantTimeStringCompare(hf.Name, f.Name) {
- continue
- }
- if i == 0 {
- i = uint64(idx + 1)
- }
- if f.Sensitive {
- continue
- }
- if !constantTimeStringCompare(hf.Value, f.Value) {
- continue
- }
- i = uint64(idx + 1)
- nameValueMatch = true
- return
+ i, nameValueMatch = staticTable.search(f)
+ if nameValueMatch {
+ return i, true
}
- j, nameValueMatch := e.dynTab.search(f)
+ j, nameValueMatch := e.dynTab.table.search(f)
if nameValueMatch || (i == 0 && j != 0) {
- i = j + uint64(len(staticTable))
+ return j + uint64(staticTable.len()), nameValueMatch
}
- return
+
+ return i, false
}
// SetMaxDynamicTableSize changes the dynamic header table size to v.
diff --git a/vendor/golang.org/x/net/http2/hpack/encode_test.go b/vendor/golang.org/x/net/http2/hpack/encode_test.go
index 92286f3ba..05f12db9c 100644
--- a/vendor/golang.org/x/net/http2/hpack/encode_test.go
+++ b/vendor/golang.org/x/net/http2/hpack/encode_test.go
@@ -7,6 +7,8 @@ package hpack
import (
"bytes"
"encoding/hex"
+ "fmt"
+ "math/rand"
"reflect"
"strings"
"testing"
@@ -101,17 +103,20 @@ func TestEncoderSearchTable(t *testing.T) {
wantMatch bool
}{
// Name and Value match
- {pair("foo", "bar"), uint64(len(staticTable) + 3), true},
- {pair("blake", "miz"), uint64(len(staticTable) + 2), true},
+ {pair("foo", "bar"), uint64(staticTable.len()) + 3, true},
+ {pair("blake", "miz"), uint64(staticTable.len()) + 2, true},
{pair(":method", "GET"), 2, true},
- // Only name match because Sensitive == true
- {HeaderField{":method", "GET", true}, 2, false},
+ // Only name match because Sensitive == true. This is allowed to match
+ // any ":method" entry. The current implementation uses the last entry
+ // added in newStaticTable.
+ {HeaderField{":method", "GET", true}, 3, false},
// Only Name matches
- {pair("foo", "..."), uint64(len(staticTable) + 3), false},
- {pair("blake", "..."), uint64(len(staticTable) + 2), false},
- {pair(":method", "..."), 2, false},
+ {pair("foo", "..."), uint64(staticTable.len()) + 3, false},
+ {pair("blake", "..."), uint64(staticTable.len()) + 2, false},
+ // As before, this is allowed to match any ":method" entry.
+ {pair(":method", "..."), 3, false},
// None match
{pair("foo-", "bar"), 0, false},
@@ -328,3 +333,54 @@ func TestEncoderSetMaxDynamicTableSizeLimit(t *testing.T) {
func removeSpace(s string) string {
return strings.Replace(s, " ", "", -1)
}
+
+func BenchmarkEncoderSearchTable(b *testing.B) {
+ e := NewEncoder(nil)
+
+ // A sample of possible header fields.
+ // This is not based on any actual data from HTTP/2 traces.
+ var possible []HeaderField
+ for _, f := range staticTable.ents {
+ if f.Value == "" {
+ possible = append(possible, f)
+ continue
+ }
+ // Generate 5 random values, except for cookie and set-cookie,
+ // which we know can have many values in practice.
+ num := 5
+ if f.Name == "cookie" || f.Name == "set-cookie" {
+ num = 25
+ }
+ for i := 0; i < num; i++ {
+ f.Value = fmt.Sprintf("%s-%d", f.Name, i)
+ possible = append(possible, f)
+ }
+ }
+ for k := 0; k < 10; k++ {
+ f := HeaderField{
+ Name: fmt.Sprintf("x-header-%d", k),
+ Sensitive: rand.Int()%2 == 0,
+ }
+ for i := 0; i < 5; i++ {
+ f.Value = fmt.Sprintf("%s-%d", f.Name, i)
+ possible = append(possible, f)
+ }
+ }
+
+ // Add a random sample to the dynamic table. This very loosely simulates
+ // a history of 100 requests with 20 header fields per request.
+ for r := 0; r < 100*20; r++ {
+ f := possible[rand.Int31n(int32(len(possible)))]
+ // Skip if this is in the staticTable verbatim.
+ if _, has := staticTable.search(f); !has {
+ e.dynTab.add(f)
+ }
+ }
+
+ b.ResetTimer()
+ for n := 0; n < b.N; n++ {
+ for _, f := range possible {
+ e.searchTable(f)
+ }
+ }
+}
diff --git a/vendor/golang.org/x/net/http2/hpack/hpack.go b/vendor/golang.org/x/net/http2/hpack/hpack.go
index 135b9f62c..176644acd 100644
--- a/vendor/golang.org/x/net/http2/hpack/hpack.go
+++ b/vendor/golang.org/x/net/http2/hpack/hpack.go
@@ -61,7 +61,7 @@ func (hf HeaderField) String() string {
func (hf HeaderField) Size() uint32 {
// http://http2.github.io/http2-spec/compression.html#rfc.section.4.1
// "The size of the dynamic table is the sum of the size of
- // its entries. The size of an entry is the sum of its name's
+ // its entries. The size of an entry is the sum of its name's
// length in octets (as defined in Section 5.2), its value's
// length in octets (see Section 5.2), plus 32. The size of
// an entry is calculated using the length of the name and
@@ -102,6 +102,7 @@ func NewDecoder(maxDynamicTableSize uint32, emitFunc func(f HeaderField)) *Decod
emit: emitFunc,
emitEnabled: true,
}
+ d.dynTab.table.init()
d.dynTab.allowedMaxSize = maxDynamicTableSize
d.dynTab.setMaxSize(maxDynamicTableSize)
return d
@@ -154,12 +155,9 @@ func (d *Decoder) SetAllowedMaxDynamicTableSize(v uint32) {
}
type dynamicTable struct {
- // ents is the FIFO described at
// http://http2.github.io/http2-spec/compression.html#rfc.section.2.3.2
- // The newest (low index) is append at the end, and items are
- // evicted from the front.
- ents []HeaderField
- size uint32
+ table headerFieldTable
+ size uint32 // in bytes
maxSize uint32 // current maxSize
allowedMaxSize uint32 // maxSize may go up to this, inclusive
}
@@ -169,95 +167,45 @@ func (dt *dynamicTable) setMaxSize(v uint32) {
dt.evict()
}
-// TODO: change dynamicTable to be a struct with a slice and a size int field,
-// per http://http2.github.io/http2-spec/compression.html#rfc.section.4.1:
-//
-//
-// Then make add increment the size. maybe the max size should move from Decoder to
-// dynamicTable and add should return an ok bool if there was enough space.
-//
-// Later we'll need a remove operation on dynamicTable.
-
func (dt *dynamicTable) add(f HeaderField) {
- dt.ents = append(dt.ents, f)
+ dt.table.addEntry(f)
dt.size += f.Size()
dt.evict()
}
-// If we're too big, evict old stuff (front of the slice)
+// If we're too big, evict old stuff.
func (dt *dynamicTable) evict() {
- base := dt.ents // keep base pointer of slice
- for dt.size > dt.maxSize {
- dt.size -= dt.ents[0].Size()
- dt.ents = dt.ents[1:]
- }
-
- // Shift slice contents down if we evicted things.
- if len(dt.ents) != len(base) {
- copy(base, dt.ents)
- dt.ents = base[:len(dt.ents)]
+ var n int
+ for dt.size > dt.maxSize && n < dt.table.len() {
+ dt.size -= dt.table.ents[n].Size()
+ n++
}
-}
-
-// constantTimeStringCompare compares string a and b in a constant
-// time manner.
-func constantTimeStringCompare(a, b string) bool {
- if len(a) != len(b) {
- return false
- }
-
- c := byte(0)
-
- for i := 0; i < len(a); i++ {
- c |= a[i] ^ b[i]
- }
-
- return c == 0
-}
-
-// Search searches f in the table. The return value i is 0 if there is
-// no name match. If there is name match or name/value match, i is the
-// index of that entry (1-based). If both name and value match,
-// nameValueMatch becomes true.
-func (dt *dynamicTable) search(f HeaderField) (i uint64, nameValueMatch bool) {
- l := len(dt.ents)
- for j := l - 1; j >= 0; j-- {
- ent := dt.ents[j]
- if !constantTimeStringCompare(ent.Name, f.Name) {
- continue
- }
- if i == 0 {
- i = uint64(l - j)
- }
- if f.Sensitive {
- continue
- }
- if !constantTimeStringCompare(ent.Value, f.Value) {
- continue
- }
- i = uint64(l - j)
- nameValueMatch = true
- return
- }
- return
+ dt.table.evictOldest(n)
}
func (d *Decoder) maxTableIndex() int {
- return len(d.dynTab.ents) + len(staticTable)
+ // This should never overflow. RFC 7540 Section 6.5.2 limits the size of
+ // the dynamic table to 2^32 bytes, where each entry will occupy more than
+ // one byte. Further, the staticTable has a fixed, small length.
+ return d.dynTab.table.len() + staticTable.len()
}
func (d *Decoder) at(i uint64) (hf HeaderField, ok bool) {
- if i < 1 {
+ // See Section 2.3.3.
+ if i == 0 {
return
}
+ if i <= uint64(staticTable.len()) {
+ return staticTable.ents[i-1], true
+ }
if i > uint64(d.maxTableIndex()) {
return
}
- if i <= uint64(len(staticTable)) {
- return staticTable[i-1], true
- }
- dents := d.dynTab.ents
- return dents[len(dents)-(int(i)-len(staticTable))], true
+ // In the dynamic table, newer entries have lower indices.
+ // However, dt.ents[0] is the oldest entry. Hence, dt.ents is
+ // the reversed dynamic table.
+ dt := d.dynTab.table
+ return dt.ents[dt.len()-(int(i)-staticTable.len())], true
}
// Decode decodes an entire block.
@@ -307,7 +255,7 @@ func (d *Decoder) Write(p []byte) (n int, err error) {
err = d.parseHeaderFieldRepr()
if err == errNeedMore {
// Extra paranoia, making sure saveBuf won't
- // get too large. All the varint and string
+ // get too large. All the varint and string
// reading code earlier should already catch
// overlong things and return ErrStringLength,
// but keep this as a last resort.
diff --git a/vendor/golang.org/x/net/http2/hpack/hpack_test.go b/vendor/golang.org/x/net/http2/hpack/hpack_test.go
index 4c7b17bfb..c2f8fd102 100644
--- a/vendor/golang.org/x/net/http2/hpack/hpack_test.go
+++ b/vendor/golang.org/x/net/http2/hpack/hpack_test.go
@@ -5,117 +5,16 @@
package hpack
import (
- "bufio"
"bytes"
"encoding/hex"
"fmt"
"math/rand"
"reflect"
- "regexp"
- "strconv"
"strings"
"testing"
"time"
)
-func TestStaticTable(t *testing.T) {
- fromSpec := `
- +-------+-----------------------------+---------------+
- | 1 | :authority | |
- | 2 | :method | GET |
- | 3 | :method | POST |
- | 4 | :path | / |
- | 5 | :path | /index.html |
- | 6 | :scheme | http |
- | 7 | :scheme | https |
- | 8 | :status | 200 |
- | 9 | :status | 204 |
- | 10 | :status | 206 |
- | 11 | :status | 304 |
- | 12 | :status | 400 |
- | 13 | :status | 404 |
- | 14 | :status | 500 |
- | 15 | accept-charset | |
- | 16 | accept-encoding | gzip, deflate |
- | 17 | accept-language | |
- | 18 | accept-ranges | |
- | 19 | accept | |
- | 20 | access-control-allow-origin | |
- | 21 | age | |
- | 22 | allow | |
- | 23 | authorization | |
- | 24 | cache-control | |
- | 25 | content-disposition | |
- | 26 | content-encoding | |
- | 27 | content-language | |
- | 28 | content-length | |
- | 29 | content-location | |
- | 30 | content-range | |
- | 31 | content-type | |
- | 32 | cookie | |
- | 33 | date | |
- | 34 | etag | |
- | 35 | expect | |
- | 36 | expires | |
- | 37 | from | |
- | 38 | host | |
- | 39 | if-match | |
- | 40 | if-modified-since | |
- | 41 | if-none-match | |
- | 42 | if-range | |
- | 43 | if-unmodified-since | |
- | 44 | last-modified | |
- | 45 | link | |
- | 46 | location | |
- | 47 | max-forwards | |
- | 48 | proxy-authenticate | |
- | 49 | proxy-authorization | |
- | 50 | range | |
- | 51 | referer | |
- | 52 | refresh | |
- | 53 | retry-after | |
- | 54 | server | |
- | 55 | set-cookie | |
- | 56 | strict-transport-security | |
- | 57 | transfer-encoding | |
- | 58 | user-agent | |
- | 59 | vary | |
- | 60 | via | |
- | 61 | www-authenticate | |
- +-------+-----------------------------+---------------+
-`
- bs := bufio.NewScanner(strings.NewReader(fromSpec))
- re := regexp.MustCompile(`\| (\d+)\s+\| (\S+)\s*\| (\S(.*\S)?)?\s+\|`)
- for bs.Scan() {
- l := bs.Text()
- if !strings.Contains(l, "|") {
- continue
- }
- m := re.FindStringSubmatch(l)
- if m == nil {
- continue
- }
- i, err := strconv.Atoi(m[1])
- if err != nil {
- t.Errorf("Bogus integer on line %q", l)
- continue
- }
- if i < 1 || i > len(staticTable) {
- t.Errorf("Bogus index %d on line %q", i, l)
- continue
- }
- if got, want := staticTable[i-1].Name, m[2]; got != want {
- t.Errorf("header index %d name = %q; want %q", i, got, want)
- }
- if got, want := staticTable[i-1].Value, m[3]; got != want {
- t.Errorf("header index %d value = %q; want %q", i, got, want)
- }
- }
- if err := bs.Err(); err != nil {
- t.Error(err)
- }
-}
-
func (d *Decoder) mustAt(idx int) HeaderField {
if hf, ok := d.at(uint64(idx)); !ok {
panic(fmt.Sprintf("bogus index %d", idx))
@@ -132,10 +31,10 @@ func TestDynamicTableAt(t *testing.T) {
}
d.dynTab.add(pair("foo", "bar"))
d.dynTab.add(pair("blake", "miz"))
- if got, want := at(len(staticTable)+1), (pair("blake", "miz")); got != want {
+ if got, want := at(staticTable.len()+1), (pair("blake", "miz")); got != want {
t.Errorf("at(dyn 1) = %v; want %v", got, want)
}
- if got, want := at(len(staticTable)+2), (pair("foo", "bar")); got != want {
+ if got, want := at(staticTable.len()+2), (pair("foo", "bar")); got != want {
t.Errorf("at(dyn 2) = %v; want %v", got, want)
}
if got, want := at(3), (pair(":method", "POST")); got != want {
@@ -143,41 +42,6 @@ func TestDynamicTableAt(t *testing.T) {
}
}
-func TestDynamicTableSearch(t *testing.T) {
- dt := dynamicTable{}
- dt.setMaxSize(4096)
-
- dt.add(pair("foo", "bar"))
- dt.add(pair("blake", "miz"))
- dt.add(pair(":method", "GET"))
-
- tests := []struct {
- hf HeaderField
- wantI uint64
- wantMatch bool
- }{
- // Name and Value match
- {pair("foo", "bar"), 3, true},
- {pair(":method", "GET"), 1, true},
-
- // Only name match because of Sensitive == true
- {HeaderField{"blake", "miz", true}, 2, false},
-
- // Only Name matches
- {pair("foo", "..."), 3, false},
- {pair("blake", "..."), 2, false},
- {pair(":method", "..."), 1, false},
-
- // None match
- {pair("foo-", "bar"), 0, false},
- }
- for _, tt := range tests {
- if gotI, gotMatch := dt.search(tt.hf); gotI != tt.wantI || gotMatch != tt.wantMatch {
- t.Errorf("d.search(%+v) = %v, %v; want %v, %v", tt.hf, gotI, gotMatch, tt.wantI, tt.wantMatch)
- }
- }
-}
-
func TestDynamicTableSizeEvict(t *testing.T) {
d := NewDecoder(4096, nil)
if want := uint32(0); d.dynTab.size != want {
@@ -196,7 +60,7 @@ func TestDynamicTableSizeEvict(t *testing.T) {
if want := uint32(6 + 32); d.dynTab.size != want {
t.Fatalf("after setMaxSize, size = %d; want %d", d.dynTab.size, want)
}
- if got, want := d.mustAt(len(staticTable)+1), (pair("foo", "bar")); got != want {
+ if got, want := d.mustAt(staticTable.len()+1), (pair("foo", "bar")); got != want {
t.Errorf("at(dyn 1) = %v; want %v", got, want)
}
add(pair("long", strings.Repeat("x", 500)))
@@ -255,9 +119,9 @@ func TestDecoderDecode(t *testing.T) {
}
func (dt *dynamicTable) reverseCopy() (hf []HeaderField) {
- hf = make([]HeaderField, len(dt.ents))
+ hf = make([]HeaderField, len(dt.table.ents))
for i := range hf {
- hf[i] = dt.ents[len(dt.ents)-1-i]
+ hf[i] = dt.table.ents[len(dt.table.ents)-1-i]
}
return
}
diff --git a/vendor/golang.org/x/net/http2/hpack/tables.go b/vendor/golang.org/x/net/http2/hpack/tables.go
index b9283a023..870159244 100644
--- a/vendor/golang.org/x/net/http2/hpack/tables.go
+++ b/vendor/golang.org/x/net/http2/hpack/tables.go
@@ -4,73 +4,199 @@
package hpack
+import (
+ "fmt"
+)
+
+// headerFieldTable implements a list of HeaderFields.
+// This is used to implement the static and dynamic tables.
+type headerFieldTable struct {
+ // For static tables, entries are never evicted.
+ //
+ // For dynamic tables, entries are evicted from ents[0] and added to the end.
+ // Each entry has a unique id that starts at one and increments for each
+ // entry that is added. This unique id is stable across evictions, meaning
+ // it can be used as a pointer to a specific entry. As in hpack, unique ids
+ // are 1-based. The unique id for ents[k] is k + evictCount + 1.
+ //
+ // Zero is not a valid unique id.
+ //
+ // evictCount should not overflow in any remotely practical situation. In
+ // practice, we will have one dynamic table per HTTP/2 connection. If we
+ // assume a very powerful server that handles 1M QPS per connection and each
+ // request adds (then evicts) 100 entries from the table, it would still take
+ // 2M years for evictCount to overflow.
+ ents []HeaderField
+ evictCount uint64
+
+ // byName maps a HeaderField name to the unique id of the newest entry with
+ // the same name. See above for a definition of "unique id".
+ byName map[string]uint64
+
+ // byNameValue maps a HeaderField name/value pair to the unique id of the newest
+ // entry with the same name and value. See above for a definition of "unique id".
+ byNameValue map[pairNameValue]uint64
+}
+
+type pairNameValue struct {
+ name, value string
+}
+
+func (t *headerFieldTable) init() {
+ t.byName = make(map[string]uint64)
+ t.byNameValue = make(map[pairNameValue]uint64)
+}
+
+// len reports the number of entries in the table.
+func (t *headerFieldTable) len() int {
+ return len(t.ents)
+}
+
+// addEntry adds a new entry.
+func (t *headerFieldTable) addEntry(f HeaderField) {
+ id := uint64(t.len()) + t.evictCount + 1
+ t.byName[f.Name] = id
+ t.byNameValue[pairNameValue{f.Name, f.Value}] = id
+ t.ents = append(t.ents, f)
+}
+
+// evictOldest evicts the n oldest entries in the table.
+func (t *headerFieldTable) evictOldest(n int) {
+ if n > t.len() {
+ panic(fmt.Sprintf("evictOldest(%v) on table with %v entries", n, t.len()))
+ }
+ for k := 0; k < n; k++ {
+ f := t.ents[k]
+ id := t.evictCount + uint64(k) + 1
+ if t.byName[f.Name] == id {
+ t.byName[f.Name] = 0
+ }
+ if p := (pairNameValue{f.Name, f.Value}); t.byNameValue[p] == id {
+ t.byNameValue[p] = 0
+ }
+ }
+ copy(t.ents, t.ents[n:])
+ for k := t.len() - n; k < t.len(); k++ {
+ t.ents[k] = HeaderField{} // so strings can be garbage collected
+ }
+ t.ents = t.ents[:t.len()-n]
+ if t.evictCount+uint64(n) < t.evictCount {
+ panic("evictCount overflow")
+ }
+ t.evictCount += uint64(n)
+}
+
+// search finds f in the table. If there is no match, i is 0.
+// If both name and value match, i is the matched index and nameValueMatch
+// becomes true. If only name matches, i points to that index and
+// nameValueMatch becomes false.
+//
+// The returned index is a 1-based HPACK index. For dynamic tables, HPACK says
+// that index 1 should be the newest entry, but t.ents[0] is the oldest entry,
+// meaning t.ents is reversed for dynamic tables. Hence, when t is a dynamic
+// table, the return value i actually refers to the entry t.ents[t.len()-i].
+//
+// All tables are assumed to be a dynamic tables except for the global
+// staticTable pointer.
+//
+// See Section 2.3.3.
+func (t *headerFieldTable) search(f HeaderField) (i uint64, nameValueMatch bool) {
+ if !f.Sensitive {
+ if id := t.byNameValue[pairNameValue{f.Name, f.Value}]; id != 0 {
+ return t.idToIndex(id), true
+ }
+ }
+ if id := t.byName[f.Name]; id != 0 {
+ return t.idToIndex(id), false
+ }
+ return 0, false
+}
+
+// idToIndex converts a unique id to an HPACK index.
+// See Section 2.3.3.
+func (t *headerFieldTable) idToIndex(id uint64) uint64 {
+ if id <= t.evictCount {
+ panic(fmt.Sprintf("id (%v) <= evictCount (%v)", id, t.evictCount))
+ }
+ k := id - t.evictCount - 1 // convert id to an index t.ents[k]
+ if t != staticTable {
+ return uint64(t.len()) - k // dynamic table
+ }
+ return k + 1
+}
+
func pair(name, value string) HeaderField {
return HeaderField{Name: name, Value: value}
}
// http://tools.ietf.org/html/draft-ietf-httpbis-header-compression-07#appendix-B
-var staticTable = [...]HeaderField{
- pair(":authority", ""), // index 1 (1-based)
- pair(":method", "GET"),
- pair(":method", "POST"),
- pair(":path", "/"),
- pair(":path", "/index.html"),
- pair(":scheme", "http"),
- pair(":scheme", "https"),
- pair(":status", "200"),
- pair(":status", "204"),
- pair(":status", "206"),
- pair(":status", "304"),
- pair(":status", "400"),
- pair(":status", "404"),
- pair(":status", "500"),
- pair("accept-charset", ""),
- pair("accept-encoding", "gzip, deflate"),
- pair("accept-language", ""),
- pair("accept-ranges", ""),
- pair("accept", ""),
- pair("access-control-allow-origin", ""),
- pair("age", ""),
- pair("allow", ""),
- pair("authorization", ""),
- pair("cache-control", ""),
- pair("content-disposition", ""),
- pair("content-encoding", ""),
- pair("content-language", ""),
- pair("content-length", ""),
- pair("content-location", ""),
- pair("content-range", ""),
- pair("content-type", ""),
- pair("cookie", ""),
- pair("date", ""),
- pair("etag", ""),
- pair("expect", ""),
- pair("expires", ""),
- pair("from", ""),
- pair("host", ""),
- pair("if-match", ""),
- pair("if-modified-since", ""),
- pair("if-none-match", ""),
- pair("if-range", ""),
- pair("if-unmodified-since", ""),
- pair("last-modified", ""),
- pair("link", ""),
- pair("location", ""),
- pair("max-forwards", ""),
- pair("proxy-authenticate", ""),
- pair("proxy-authorization", ""),
- pair("range", ""),
- pair("referer", ""),
- pair("refresh", ""),
- pair("retry-after", ""),
- pair("server", ""),
- pair("set-cookie", ""),
- pair("strict-transport-security", ""),
- pair("transfer-encoding", ""),
- pair("user-agent", ""),
- pair("vary", ""),
- pair("via", ""),
- pair("www-authenticate", ""),
+var staticTable = newStaticTable()
+
+func newStaticTable() *headerFieldTable {
+ t := &headerFieldTable{}
+ t.init()
+ t.addEntry(pair(":authority", ""))
+ t.addEntry(pair(":method", "GET"))
+ t.addEntry(pair(":method", "POST"))
+ t.addEntry(pair(":path", "/"))
+ t.addEntry(pair(":path", "/index.html"))
+ t.addEntry(pair(":scheme", "http"))
+ t.addEntry(pair(":scheme", "https"))
+ t.addEntry(pair(":status", "200"))
+ t.addEntry(pair(":status", "204"))
+ t.addEntry(pair(":status", "206"))
+ t.addEntry(pair(":status", "304"))
+ t.addEntry(pair(":status", "400"))
+ t.addEntry(pair(":status", "404"))
+ t.addEntry(pair(":status", "500"))
+ t.addEntry(pair("accept-charset", ""))
+ t.addEntry(pair("accept-encoding", "gzip, deflate"))
+ t.addEntry(pair("accept-language", ""))
+ t.addEntry(pair("accept-ranges", ""))
+ t.addEntry(pair("accept", ""))
+ t.addEntry(pair("access-control-allow-origin", ""))
+ t.addEntry(pair("age", ""))
+ t.addEntry(pair("allow", ""))
+ t.addEntry(pair("authorization", ""))
+ t.addEntry(pair("cache-control", ""))
+ t.addEntry(pair("content-disposition", ""))
+ t.addEntry(pair("content-encoding", ""))
+ t.addEntry(pair("content-language", ""))
+ t.addEntry(pair("content-length", ""))
+ t.addEntry(pair("content-location", ""))
+ t.addEntry(pair("content-range", ""))
+ t.addEntry(pair("content-type", ""))
+ t.addEntry(pair("cookie", ""))
+ t.addEntry(pair("date", ""))
+ t.addEntry(pair("etag", ""))
+ t.addEntry(pair("expect", ""))
+ t.addEntry(pair("expires", ""))
+ t.addEntry(pair("from", ""))
+ t.addEntry(pair("host", ""))
+ t.addEntry(pair("if-match", ""))
+ t.addEntry(pair("if-modified-since", ""))
+ t.addEntry(pair("if-none-match", ""))
+ t.addEntry(pair("if-range", ""))
+ t.addEntry(pair("if-unmodified-since", ""))
+ t.addEntry(pair("last-modified", ""))
+ t.addEntry(pair("link", ""))
+ t.addEntry(pair("location", ""))
+ t.addEntry(pair("max-forwards", ""))
+ t.addEntry(pair("proxy-authenticate", ""))
+ t.addEntry(pair("proxy-authorization", ""))
+ t.addEntry(pair("range", ""))
+ t.addEntry(pair("referer", ""))
+ t.addEntry(pair("refresh", ""))
+ t.addEntry(pair("retry-after", ""))
+ t.addEntry(pair("server", ""))
+ t.addEntry(pair("set-cookie", ""))
+ t.addEntry(pair("strict-transport-security", ""))
+ t.addEntry(pair("transfer-encoding", ""))
+ t.addEntry(pair("user-agent", ""))
+ t.addEntry(pair("vary", ""))
+ t.addEntry(pair("via", ""))
+ t.addEntry(pair("www-authenticate", ""))
+ return t
}
var huffmanCodes = [256]uint32{
diff --git a/vendor/golang.org/x/net/http2/hpack/tables_test.go b/vendor/golang.org/x/net/http2/hpack/tables_test.go
new file mode 100644
index 000000000..7f40d9a42
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/hpack/tables_test.go
@@ -0,0 +1,188 @@
+// 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 hpack
+
+import (
+ "bufio"
+ "regexp"
+ "strconv"
+ "strings"
+ "testing"
+)
+
+func TestHeaderFieldTable(t *testing.T) {
+ table := &headerFieldTable{}
+ table.init()
+ table.addEntry(pair("key1", "value1-1"))
+ table.addEntry(pair("key2", "value2-1"))
+ table.addEntry(pair("key1", "value1-2"))
+ table.addEntry(pair("key3", "value3-1"))
+ table.addEntry(pair("key4", "value4-1"))
+ table.addEntry(pair("key2", "value2-2"))
+
+ // Tests will be run twice: once before evicting anything, and
+ // again after evicting the three oldest entries.
+ tests := []struct {
+ f HeaderField
+ beforeWantStaticI uint64
+ beforeWantMatch bool
+ afterWantStaticI uint64
+ afterWantMatch bool
+ }{
+ {HeaderField{"key1", "value1-1", false}, 1, true, 0, false},
+ {HeaderField{"key1", "value1-2", false}, 3, true, 0, false},
+ {HeaderField{"key1", "value1-3", false}, 3, false, 0, false},
+ {HeaderField{"key2", "value2-1", false}, 2, true, 3, false},
+ {HeaderField{"key2", "value2-2", false}, 6, true, 3, true},
+ {HeaderField{"key2", "value2-3", false}, 6, false, 3, false},
+ {HeaderField{"key4", "value4-1", false}, 5, true, 2, true},
+ // Name match only, because sensitive.
+ {HeaderField{"key4", "value4-1", true}, 5, false, 2, false},
+ // Key not found.
+ {HeaderField{"key5", "value5-x", false}, 0, false, 0, false},
+ }
+
+ staticToDynamic := func(i uint64) uint64 {
+ if i == 0 {
+ return 0
+ }
+ return uint64(table.len()) - i + 1 // dynamic is the reversed table
+ }
+
+ searchStatic := func(f HeaderField) (uint64, bool) {
+ old := staticTable
+ staticTable = table
+ defer func() { staticTable = old }()
+ return staticTable.search(f)
+ }
+
+ searchDynamic := func(f HeaderField) (uint64, bool) {
+ return table.search(f)
+ }
+
+ for _, test := range tests {
+ gotI, gotMatch := searchStatic(test.f)
+ if wantI, wantMatch := test.beforeWantStaticI, test.beforeWantMatch; gotI != wantI || gotMatch != wantMatch {
+ t.Errorf("before evictions: searchStatic(%+v)=%v,%v want %v,%v", test.f, gotI, gotMatch, wantI, wantMatch)
+ }
+ gotI, gotMatch = searchDynamic(test.f)
+ wantDynamicI := staticToDynamic(test.beforeWantStaticI)
+ if wantI, wantMatch := wantDynamicI, test.beforeWantMatch; gotI != wantI || gotMatch != wantMatch {
+ t.Errorf("before evictions: searchDynamic(%+v)=%v,%v want %v,%v", test.f, gotI, gotMatch, wantI, wantMatch)
+ }
+ }
+
+ table.evictOldest(3)
+
+ for _, test := range tests {
+ gotI, gotMatch := searchStatic(test.f)
+ if wantI, wantMatch := test.afterWantStaticI, test.afterWantMatch; gotI != wantI || gotMatch != wantMatch {
+ t.Errorf("after evictions: searchStatic(%+v)=%v,%v want %v,%v", test.f, gotI, gotMatch, wantI, wantMatch)
+ }
+ gotI, gotMatch = searchDynamic(test.f)
+ wantDynamicI := staticToDynamic(test.afterWantStaticI)
+ if wantI, wantMatch := wantDynamicI, test.afterWantMatch; gotI != wantI || gotMatch != wantMatch {
+ t.Errorf("after evictions: searchDynamic(%+v)=%v,%v want %v,%v", test.f, gotI, gotMatch, wantI, wantMatch)
+ }
+ }
+}
+
+func TestStaticTable(t *testing.T) {
+ fromSpec := `
+ +-------+-----------------------------+---------------+
+ | 1 | :authority | |
+ | 2 | :method | GET |
+ | 3 | :method | POST |
+ | 4 | :path | / |
+ | 5 | :path | /index.html |
+ | 6 | :scheme | http |
+ | 7 | :scheme | https |
+ | 8 | :status | 200 |
+ | 9 | :status | 204 |
+ | 10 | :status | 206 |
+ | 11 | :status | 304 |
+ | 12 | :status | 400 |
+ | 13 | :status | 404 |
+ | 14 | :status | 500 |
+ | 15 | accept-charset | |
+ | 16 | accept-encoding | gzip, deflate |
+ | 17 | accept-language | |
+ | 18 | accept-ranges | |
+ | 19 | accept | |
+ | 20 | access-control-allow-origin | |
+ | 21 | age | |
+ | 22 | allow | |
+ | 23 | authorization | |
+ | 24 | cache-control | |
+ | 25 | content-disposition | |
+ | 26 | content-encoding | |
+ | 27 | content-language | |
+ | 28 | content-length | |
+ | 29 | content-location | |
+ | 30 | content-range | |
+ | 31 | content-type | |
+ | 32 | cookie | |
+ | 33 | date | |
+ | 34 | etag | |
+ | 35 | expect | |
+ | 36 | expires | |
+ | 37 | from | |
+ | 38 | host | |
+ | 39 | if-match | |
+ | 40 | if-modified-since | |
+ | 41 | if-none-match | |
+ | 42 | if-range | |
+ | 43 | if-unmodified-since | |
+ | 44 | last-modified | |
+ | 45 | link | |
+ | 46 | location | |
+ | 47 | max-forwards | |
+ | 48 | proxy-authenticate | |
+ | 49 | proxy-authorization | |
+ | 50 | range | |
+ | 51 | referer | |
+ | 52 | refresh | |
+ | 53 | retry-after | |
+ | 54 | server | |
+ | 55 | set-cookie | |
+ | 56 | strict-transport-security | |
+ | 57 | transfer-encoding | |
+ | 58 | user-agent | |
+ | 59 | vary | |
+ | 60 | via | |
+ | 61 | www-authenticate | |
+ +-------+-----------------------------+---------------+
+`
+ bs := bufio.NewScanner(strings.NewReader(fromSpec))
+ re := regexp.MustCompile(`\| (\d+)\s+\| (\S+)\s*\| (\S(.*\S)?)?\s+\|`)
+ for bs.Scan() {
+ l := bs.Text()
+ if !strings.Contains(l, "|") {
+ continue
+ }
+ m := re.FindStringSubmatch(l)
+ if m == nil {
+ continue
+ }
+ i, err := strconv.Atoi(m[1])
+ if err != nil {
+ t.Errorf("Bogus integer on line %q", l)
+ continue
+ }
+ if i < 1 || i > staticTable.len() {
+ t.Errorf("Bogus index %d on line %q", i, l)
+ continue
+ }
+ if got, want := staticTable.ents[i-1].Name, m[2]; got != want {
+ t.Errorf("header index %d name = %q; want %q", i, got, want)
+ }
+ if got, want := staticTable.ents[i-1].Value, m[3]; got != want {
+ t.Errorf("header index %d value = %q; want %q", i, got, want)
+ }
+ }
+ if err := bs.Err(); err != nil {
+ t.Error(err)
+ }
+}
diff --git a/vendor/golang.org/x/net/http2/pipe.go b/vendor/golang.org/x/net/http2/pipe.go
index 53b7a1daf..914aaf8a7 100644
--- a/vendor/golang.org/x/net/http2/pipe.go
+++ b/vendor/golang.org/x/net/http2/pipe.go
@@ -10,7 +10,7 @@ import (
"sync"
)
-// pipe is a goroutine-safe io.Reader/io.Writer pair. It's like
+// pipe is a goroutine-safe io.Reader/io.Writer pair. It's like
// io.Pipe except there are no PipeReader/PipeWriter halves, and the
// underlying buffer is an interface. (io.Pipe is always unbuffered)
type pipe struct {
diff --git a/vendor/golang.org/x/net/http2/server.go b/vendor/golang.org/x/net/http2/server.go
index 3c6b90ccd..550427dda 100644
--- a/vendor/golang.org/x/net/http2/server.go
+++ b/vendor/golang.org/x/net/http2/server.go
@@ -110,11 +110,38 @@ type Server struct {
// activity for the purposes of IdleTimeout.
IdleTimeout time.Duration
+ // MaxUploadBufferPerConnection is the size of the initial flow
+ // control window for each connections. The HTTP/2 spec does not
+ // allow this to be smaller than 65535 or larger than 2^32-1.
+ // If the value is outside this range, a default value will be
+ // used instead.
+ MaxUploadBufferPerConnection int32
+
+ // MaxUploadBufferPerStream is the size of the initial flow control
+ // window for each stream. The HTTP/2 spec does not allow this to
+ // be larger than 2^32-1. If the value is zero or larger than the
+ // maximum, a default value will be used instead.
+ MaxUploadBufferPerStream int32
+
// NewWriteScheduler constructs a write scheduler for a connection.
// If nil, a default scheduler is chosen.
NewWriteScheduler func() WriteScheduler
}
+func (s *Server) initialConnRecvWindowSize() int32 {
+ if s.MaxUploadBufferPerConnection > initialWindowSize {
+ return s.MaxUploadBufferPerConnection
+ }
+ return 1 << 20
+}
+
+func (s *Server) initialStreamRecvWindowSize() int32 {
+ if s.MaxUploadBufferPerStream > 0 {
+ return s.MaxUploadBufferPerStream
+ }
+ return 1 << 20
+}
+
func (s *Server) maxReadFrameSize() uint32 {
if v := s.MaxReadFrameSize; v >= minMaxFrameSize && v <= maxFrameSize {
return v
@@ -255,27 +282,27 @@ func (s *Server) ServeConn(c net.Conn, opts *ServeConnOpts) {
defer cancel()
sc := &serverConn{
- srv: s,
- hs: opts.baseConfig(),
- conn: c,
- baseCtx: baseCtx,
- remoteAddrStr: c.RemoteAddr().String(),
- bw: newBufferedWriter(c),
- handler: opts.handler(),
- streams: make(map[uint32]*stream),
- readFrameCh: make(chan readFrameResult),
- wantWriteFrameCh: make(chan FrameWriteRequest, 8),
- wantStartPushCh: make(chan startPushRequest, 8),
- wroteFrameCh: make(chan frameWriteResult, 1), // buffered; one send in writeFrameAsync
- bodyReadCh: make(chan bodyReadMsg), // buffering doesn't matter either way
- doneServing: make(chan struct{}),
- clientMaxStreams: math.MaxUint32, // Section 6.5.2: "Initially, there is no limit to this value"
- advMaxStreams: s.maxConcurrentStreams(),
- initialWindowSize: initialWindowSize,
- maxFrameSize: initialMaxFrameSize,
- headerTableSize: initialHeaderTableSize,
- serveG: newGoroutineLock(),
- pushEnabled: true,
+ srv: s,
+ hs: opts.baseConfig(),
+ conn: c,
+ baseCtx: baseCtx,
+ remoteAddrStr: c.RemoteAddr().String(),
+ bw: newBufferedWriter(c),
+ handler: opts.handler(),
+ streams: make(map[uint32]*stream),
+ readFrameCh: make(chan readFrameResult),
+ wantWriteFrameCh: make(chan FrameWriteRequest, 8),
+ wantStartPushCh: make(chan startPushRequest, 8),
+ wroteFrameCh: make(chan frameWriteResult, 1), // buffered; one send in writeFrameAsync
+ bodyReadCh: make(chan bodyReadMsg), // buffering doesn't matter either way
+ doneServing: make(chan struct{}),
+ clientMaxStreams: math.MaxUint32, // Section 6.5.2: "Initially, there is no limit to this value"
+ advMaxStreams: s.maxConcurrentStreams(),
+ initialStreamSendWindowSize: initialWindowSize,
+ maxFrameSize: initialMaxFrameSize,
+ headerTableSize: initialHeaderTableSize,
+ serveG: newGoroutineLock(),
+ pushEnabled: true,
}
// The net/http package sets the write deadline from the
@@ -294,6 +321,9 @@ func (s *Server) ServeConn(c net.Conn, opts *ServeConnOpts) {
sc.writeSched = NewRandomWriteScheduler()
}
+ // These start at the RFC-specified defaults. If there is a higher
+ // configured value for inflow, that will be updated when we send a
+ // WINDOW_UPDATE shortly after sending SETTINGS.
sc.flow.add(initialWindowSize)
sc.inflow.add(initialWindowSize)
sc.hpackEncoder = hpack.NewEncoder(&sc.headerWriteBuf)
@@ -387,34 +417,34 @@ type serverConn struct {
writeSched WriteScheduler
// Everything following is owned by the serve loop; use serveG.check():
- serveG goroutineLock // used to verify funcs are on serve()
- pushEnabled bool
- sawFirstSettings bool // got the initial SETTINGS frame after the preface
- needToSendSettingsAck bool
- unackedSettings int // how many SETTINGS have we sent without ACKs?
- clientMaxStreams uint32 // SETTINGS_MAX_CONCURRENT_STREAMS from client (our PUSH_PROMISE limit)
- advMaxStreams uint32 // our SETTINGS_MAX_CONCURRENT_STREAMS advertised the client
- curClientStreams uint32 // number of open streams initiated by the client
- curPushedStreams uint32 // number of open streams initiated by server push
- maxClientStreamID uint32 // max ever seen from client (odd), or 0 if there have been no client requests
- maxPushPromiseID uint32 // ID of the last push promise (even), or 0 if there have been no pushes
- streams map[uint32]*stream
- initialWindowSize int32
- maxFrameSize int32
- headerTableSize uint32
- peerMaxHeaderListSize uint32 // zero means unknown (default)
- canonHeader map[string]string // http2-lower-case -> Go-Canonical-Case
- writingFrame bool // started writing a frame (on serve goroutine or separate)
- writingFrameAsync bool // started a frame on its own goroutine but haven't heard back on wroteFrameCh
- needsFrameFlush bool // last frame write wasn't a flush
- inGoAway bool // we've started to or sent GOAWAY
- inFrameScheduleLoop bool // whether we're in the scheduleFrameWrite loop
- needToSendGoAway bool // we need to schedule a GOAWAY frame write
- goAwayCode ErrCode
- shutdownTimerCh <-chan time.Time // nil until used
- shutdownTimer *time.Timer // nil until used
- idleTimer *time.Timer // nil if unused
- idleTimerCh <-chan time.Time // nil if unused
+ serveG goroutineLock // used to verify funcs are on serve()
+ pushEnabled bool
+ sawFirstSettings bool // got the initial SETTINGS frame after the preface
+ needToSendSettingsAck bool
+ unackedSettings int // how many SETTINGS have we sent without ACKs?
+ clientMaxStreams uint32 // SETTINGS_MAX_CONCURRENT_STREAMS from client (our PUSH_PROMISE limit)
+ advMaxStreams uint32 // our SETTINGS_MAX_CONCURRENT_STREAMS advertised the client
+ curClientStreams uint32 // number of open streams initiated by the client
+ curPushedStreams uint32 // number of open streams initiated by server push
+ maxClientStreamID uint32 // max ever seen from client (odd), or 0 if there have been no client requests
+ maxPushPromiseID uint32 // ID of the last push promise (even), or 0 if there have been no pushes
+ streams map[uint32]*stream
+ initialStreamSendWindowSize int32
+ maxFrameSize int32
+ headerTableSize uint32
+ peerMaxHeaderListSize uint32 // zero means unknown (default)
+ canonHeader map[string]string // http2-lower-case -> Go-Canonical-Case
+ writingFrame bool // started writing a frame (on serve goroutine or separate)
+ writingFrameAsync bool // started a frame on its own goroutine but haven't heard back on wroteFrameCh
+ needsFrameFlush bool // last frame write wasn't a flush
+ inGoAway bool // we've started to or sent GOAWAY
+ inFrameScheduleLoop bool // whether we're in the scheduleFrameWrite loop
+ needToSendGoAway bool // we need to schedule a GOAWAY frame write
+ goAwayCode ErrCode
+ shutdownTimerCh <-chan time.Time // nil until used
+ shutdownTimer *time.Timer // nil until used
+ idleTimer *time.Timer // nil if unused
+ idleTimerCh <-chan time.Time // nil if unused
// Owned by the writeFrameAsync goroutine:
headerWriteBuf bytes.Buffer
@@ -463,10 +493,9 @@ type stream struct {
numTrailerValues int64
weight uint8
state streamState
- resetQueued bool // RST_STREAM queued for write; set by sc.resetStream
- gotTrailerHeader bool // HEADER frame for trailers was seen
- wroteHeaders bool // whether we wrote headers (not status 100)
- reqBuf []byte // if non-nil, body pipe buffer to return later at EOF
+ resetQueued bool // RST_STREAM queued for write; set by sc.resetStream
+ gotTrailerHeader bool // HEADER frame for trailers was seen
+ wroteHeaders bool // whether we wrote headers (not status 100)
trailer http.Header // accumulated trailers
reqTrailer http.Header // handler's Request.Trailer
@@ -696,21 +725,23 @@ func (sc *serverConn) serve() {
{SettingMaxFrameSize, sc.srv.maxReadFrameSize()},
{SettingMaxConcurrentStreams, sc.advMaxStreams},
{SettingMaxHeaderListSize, sc.maxHeaderListSize()},
-
- // TODO: more actual settings, notably
- // SettingInitialWindowSize, but then we also
- // want to bump up the conn window size the
- // same amount here right after the settings
+ {SettingInitialWindowSize, uint32(sc.srv.initialStreamRecvWindowSize())},
},
})
sc.unackedSettings++
+ // Each connection starts with intialWindowSize inflow tokens.
+ // If a higher value is configured, we add more tokens.
+ if diff := sc.srv.initialConnRecvWindowSize() - initialWindowSize; diff > 0 {
+ sc.sendWindowUpdate(nil, int(diff))
+ }
+
if err := sc.readPreface(); err != nil {
sc.condlogf(err, "http2: server: error reading preface from client %v: %v", sc.conn.RemoteAddr(), err)
return
}
// Now that we've got the preface, get us out of the
- // "StateNew" state. We can't go directly to idle, though.
+ // "StateNew" state. We can't go directly to idle, though.
// Active means we read some data and anticipate a request. We'll
// do another Active when we get a HEADERS frame.
sc.setConnState(http.StateActive)
@@ -1395,9 +1426,9 @@ func (sc *serverConn) processSettingInitialWindowSize(val uint32) error {
// adjust the size of all stream flow control windows that it
// maintains by the difference between the new value and the
// old value."
- old := sc.initialWindowSize
- sc.initialWindowSize = int32(val)
- growth := sc.initialWindowSize - old // may be negative
+ old := sc.initialStreamSendWindowSize
+ sc.initialStreamSendWindowSize = int32(val)
+ growth := int32(val) - old // may be negative
for _, st := range sc.streams {
if !st.flow.add(growth) {
// 6.9.2 Initial Flow Control Window Size
@@ -1719,9 +1750,9 @@ func (sc *serverConn) newStream(id, pusherID uint32, state streamState) *stream
}
st.cw.Init()
st.flow.conn = &sc.flow // link to conn-level counter
- st.flow.add(sc.initialWindowSize)
- st.inflow.conn = &sc.inflow // link to conn-level counter
- st.inflow.add(initialWindowSize) // TODO: update this when we send a higher initial window size in the initial settings
+ st.flow.add(sc.initialStreamSendWindowSize)
+ st.inflow.conn = &sc.inflow // link to conn-level counter
+ st.inflow.add(sc.srv.initialStreamRecvWindowSize())
sc.streams[id] = st
sc.writeSched.OpenStream(st.id, OpenStreamOptions{PusherID: pusherID})
@@ -1785,16 +1816,14 @@ func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*res
return nil, nil, err
}
if bodyOpen {
- st.reqBuf = getRequestBodyBuf()
- req.Body.(*requestBody).pipe = &pipe{
- b: &fixedBuffer{buf: st.reqBuf},
- }
-
if vv, ok := rp.header["Content-Length"]; ok {
req.ContentLength, _ = strconv.ParseInt(vv[0], 10, 64)
} else {
req.ContentLength = -1
}
+ req.Body.(*requestBody).pipe = &pipe{
+ b: &dataBuffer{expected: req.ContentLength},
+ }
}
return rw, req, nil
}
@@ -1890,24 +1919,6 @@ func (sc *serverConn) newWriterAndRequestNoBody(st *stream, rp requestParam) (*r
return rw, req, nil
}
-var reqBodyCache = make(chan []byte, 8)
-
-func getRequestBodyBuf() []byte {
- select {
- case b := <-reqBodyCache:
- return b
- default:
- return make([]byte, initialWindowSize)
- }
-}
-
-func putRequestBodyBuf(b []byte) {
- select {
- case reqBodyCache <- b:
- default:
- }
-}
-
// Run on its own goroutine.
func (sc *serverConn) runHandler(rw *responseWriter, req *http.Request, handler func(http.ResponseWriter, *http.Request)) {
didPanic := true
@@ -2003,12 +2014,6 @@ func (sc *serverConn) noteBodyReadFromHandler(st *stream, n int, err error) {
case <-sc.doneServing:
}
}
- if err == io.EOF {
- if buf := st.reqBuf; buf != nil {
- st.reqBuf = nil // shouldn't matter; field unused by other
- putRequestBodyBuf(buf)
- }
- }
}
func (sc *serverConn) noteBodyRead(st *stream, n int) {
@@ -2103,8 +2108,8 @@ func (b *requestBody) Read(p []byte) (n int, err error) {
return
}
-// responseWriter is the http.ResponseWriter implementation. It's
-// intentionally small (1 pointer wide) to minimize garbage. The
+// responseWriter is the http.ResponseWriter implementation. It's
+// intentionally small (1 pointer wide) to minimize garbage. The
// responseWriterState pointer inside is zeroed at the end of a
// request (in handlerDone) and calls on the responseWriter thereafter
// simply crash (caller's mistake), but the much larger responseWriterState
@@ -2278,7 +2283,7 @@ const TrailerPrefix = "Trailer:"
// says you SHOULD (but not must) predeclare any trailers in the
// header, the official ResponseWriter rules said trailers in Go must
// be predeclared, and then we reuse the same ResponseWriter.Header()
-// map to mean both Headers and Trailers. When it's time to write the
+// map to mean both Headers and Trailers. When it's time to write the
// Trailers, we pick out the fields of Headers that were declared as
// trailers. That worked for a while, until we found the first major
// user of Trailers in the wild: gRPC (using them only over http2),
diff --git a/vendor/golang.org/x/net/http2/server_test.go b/vendor/golang.org/x/net/http2/server_test.go
index dfa4cff2e..407fafc6d 100644
--- a/vendor/golang.org/x/net/http2/server_test.go
+++ b/vendor/golang.org/x/net/http2/server_test.go
@@ -80,6 +80,7 @@ type serverTesterOpt string
var optOnlyServer = serverTesterOpt("only_server")
var optQuiet = serverTesterOpt("quiet_logging")
+var optFramerReuseFrames = serverTesterOpt("frame_reuse_frames")
func newServerTester(t testing.TB, handler http.HandlerFunc, opts ...interface{}) *serverTester {
resetHooks()
@@ -91,7 +92,7 @@ func newServerTester(t testing.TB, handler http.HandlerFunc, opts ...interface{}
NextProtos: []string{NextProtoTLS},
}
- var onlyServer, quiet bool
+ var onlyServer, quiet, framerReuseFrames bool
h2server := new(Server)
for _, opt := range opts {
switch v := opt.(type) {
@@ -107,6 +108,8 @@ func newServerTester(t testing.TB, handler http.HandlerFunc, opts ...interface{}
onlyServer = true
case optQuiet:
quiet = true
+ case optFramerReuseFrames:
+ framerReuseFrames = true
}
case func(net.Conn, http.ConnState):
ts.Config.ConnState = v
@@ -149,6 +152,9 @@ func newServerTester(t testing.TB, handler http.HandlerFunc, opts ...interface{}
}
st.cc = cc
st.fr = NewFramer(cc, cc)
+ if framerReuseFrames {
+ st.fr.SetReuseFrames()
+ }
if !logFrameReads && !logFrameWrites {
st.fr.debugReadLoggerf = func(m string, v ...interface{}) {
m = time.Now().Format("2006-01-02 15:04:05.999999999 ") + strings.TrimPrefix(m, "http2: ") + "\n"
@@ -254,11 +260,52 @@ func (st *serverTester) Close() {
// greet initiates the client's HTTP/2 connection into a state where
// frames may be sent.
func (st *serverTester) greet() {
+ st.greetAndCheckSettings(func(Setting) error { return nil })
+}
+
+func (st *serverTester) greetAndCheckSettings(checkSetting func(s Setting) error) {
st.writePreface()
st.writeInitialSettings()
- st.wantSettings()
+ st.wantSettings().ForeachSetting(checkSetting)
st.writeSettingsAck()
- st.wantSettingsAck()
+
+ // The initial WINDOW_UPDATE and SETTINGS ACK can come in any order.
+ var gotSettingsAck bool
+ var gotWindowUpdate bool
+
+ for i := 0; i < 2; i++ {
+ f, err := st.readFrame()
+ if err != nil {
+ st.t.Fatal(err)
+ }
+ switch f := f.(type) {
+ case *SettingsFrame:
+ if !f.Header().Flags.Has(FlagSettingsAck) {
+ st.t.Fatal("Settings Frame didn't have ACK set")
+ }
+ gotSettingsAck = true
+
+ case *WindowUpdateFrame:
+ if f.FrameHeader.StreamID != 0 {
+ st.t.Fatalf("WindowUpdate StreamID = %d; want 0", f.FrameHeader.StreamID, 0)
+ }
+ incr := uint32((&Server{}).initialConnRecvWindowSize() - initialWindowSize)
+ if f.Increment != incr {
+ st.t.Fatalf("WindowUpdate increment = %d; want %d", f.Increment, incr)
+ }
+ gotWindowUpdate = true
+
+ default:
+ st.t.Fatalf("Wanting a settings ACK or window update, received a %T", f)
+ }
+ }
+
+ if !gotSettingsAck {
+ st.t.Fatalf("Didn't get a settings ACK")
+ }
+ if !gotWindowUpdate {
+ st.t.Fatalf("Didn't get a window update")
+ }
}
func (st *serverTester) writePreface() {
@@ -318,7 +365,7 @@ func (st *serverTester) encodeHeaderRaw(headers ...string) []byte {
}
// encodeHeader encodes headers and returns their HPACK bytes. headers
-// must contain an even number of key/value pairs. There may be
+// must contain an even number of key/value pairs. There may be
// multiple pairs for keys (e.g. "cookie"). The :method, :path, and
// :scheme headers default to GET, / and https. The :authority header
// defaults to st.ts.Listener.Addr().
@@ -578,12 +625,7 @@ func TestServer(t *testing.T) {
server sends in the HTTP/2 connection.
`)
- st.writePreface()
- st.writeInitialSettings()
- st.wantSettings()
- st.writeSettingsAck()
- st.wantSettingsAck()
-
+ st.greet()
st.writeHeaders(HeadersFrameParam{
StreamID: 1, // clients send odd numbers
BlockFragment: st.encodeHeader(),
@@ -656,7 +698,7 @@ func TestServer_Request_Get_PathSlashes(t *testing.T) {
}
// TODO: add a test with EndStream=true on the HEADERS but setting a
-// Content-Length anyway. Should we just omit it and force it to
+// Content-Length anyway. Should we just omit it and force it to
// zero?
func TestServer_Request_Post_NoContentLength_EndStream(t *testing.T) {
@@ -1192,7 +1234,7 @@ func TestServer_Handler_Sends_WindowUpdate_Padding(t *testing.T) {
EndStream: false,
EndHeaders: true,
})
- st.writeDataPadded(1, false, []byte("abcdef"), []byte("1234"))
+ st.writeDataPadded(1, false, []byte("abcdef"), []byte{0, 0, 0, 0})
// Expect to immediately get our 5 bytes of padding back for
// both the connection and stream (4 bytes of padding + 1 byte of length)
@@ -2595,11 +2637,9 @@ func TestServerDoS_MaxHeaderListSize(t *testing.T) {
defer st.Close()
// shake hands
- st.writePreface()
- st.writeInitialSettings()
frameSize := defaultMaxReadFrameSize
var advHeaderListSize *uint32
- st.wantSettings().ForeachSetting(func(s Setting) error {
+ st.greetAndCheckSettings(func(s Setting) error {
switch s.ID {
case SettingMaxFrameSize:
if s.Val < minMaxFrameSize {
@@ -2614,8 +2654,6 @@ func TestServerDoS_MaxHeaderListSize(t *testing.T) {
}
return nil
})
- st.writeSettingsAck()
- st.wantSettingsAck()
if advHeaderListSize == nil {
t.Errorf("server didn't advertise a max header list size")
@@ -2994,6 +3032,89 @@ func BenchmarkServerPosts(b *testing.B) {
}
}
+// Send a stream of messages from server to client in separate data frames.
+// Brings up performance issues seen in long streams.
+// Created to show problem in go issue #18502
+func BenchmarkServerToClientStreamDefaultOptions(b *testing.B) {
+ benchmarkServerToClientStream(b)
+}
+
+// Justification for Change-Id: Iad93420ef6c3918f54249d867098f1dadfa324d8
+// Expect to see memory/alloc reduction by opting in to Frame reuse with the Framer.
+func BenchmarkServerToClientStreamReuseFrames(b *testing.B) {
+ benchmarkServerToClientStream(b, optFramerReuseFrames)
+}
+
+func benchmarkServerToClientStream(b *testing.B, newServerOpts ...interface{}) {
+ defer disableGoroutineTracking()()
+ b.ReportAllocs()
+ const msgLen = 1
+ // default window size
+ const windowSize = 1<<16 - 1
+
+ // next message to send from the server and for the client to expect
+ nextMsg := func(i int) []byte {
+ msg := make([]byte, msgLen)
+ msg[0] = byte(i)
+ if len(msg) != msgLen {
+ panic("invalid test setup msg length")
+ }
+ return msg
+ }
+
+ st := newServerTester(b, func(w http.ResponseWriter, r *http.Request) {
+ // Consume the (empty) body from th peer before replying, otherwise
+ // the server will sometimes (depending on scheduling) send the peer a
+ // a RST_STREAM with the CANCEL error code.
+ if n, err := io.Copy(ioutil.Discard, r.Body); n != 0 || err != nil {
+ b.Errorf("Copy error; got %v, %v; want 0, nil", n, err)
+ }
+ for i := 0; i < b.N; i += 1 {
+ w.Write(nextMsg(i))
+ w.(http.Flusher).Flush()
+ }
+ }, newServerOpts...)
+ defer st.Close()
+ st.greet()
+
+ const id = uint32(1)
+
+ st.writeHeaders(HeadersFrameParam{
+ StreamID: id,
+ BlockFragment: st.encodeHeader(":method", "POST"),
+ EndStream: false,
+ EndHeaders: true,
+ })
+
+ st.writeData(id, true, nil)
+ st.wantHeaders()
+
+ var pendingWindowUpdate = uint32(0)
+
+ for i := 0; i < b.N; i += 1 {
+ expected := nextMsg(i)
+ df := st.wantData()
+ if bytes.Compare(expected, df.data) != 0 {
+ b.Fatalf("Bad message received; want %v; got %v", expected, df.data)
+ }
+ // try to send infrequent but large window updates so they don't overwhelm the test
+ pendingWindowUpdate += uint32(len(df.data))
+ if pendingWindowUpdate >= windowSize/2 {
+ if err := st.fr.WriteWindowUpdate(0, pendingWindowUpdate); err != nil {
+ b.Fatal(err)
+ }
+ if err := st.fr.WriteWindowUpdate(id, pendingWindowUpdate); err != nil {
+ b.Fatal(err)
+ }
+ pendingWindowUpdate = 0
+ }
+ }
+ df := st.wantData()
+ if !df.StreamEnded() {
+ b.Fatalf("DATA didn't have END_STREAM; got %v", df)
+ }
+}
+
// go-fuzz bug, originally reported at https://github.com/bradfitz/http2/issues/53
// Verify we don't hang.
func TestIssue53(t *testing.T) {
diff --git a/vendor/golang.org/x/net/http2/transport.go b/vendor/golang.org/x/net/http2/transport.go
index 0c7e859db..84d042d46 100644
--- a/vendor/golang.org/x/net/http2/transport.go
+++ b/vendor/golang.org/x/net/http2/transport.go
@@ -575,7 +575,7 @@ func (cc *ClientConn) canTakeNewRequestLocked() bool {
cc.nextStreamID < math.MaxInt32
}
-// onIdleTimeout is called from a time.AfterFunc goroutine. It will
+// onIdleTimeout is called from a time.AfterFunc goroutine. It will
// only be called when we're idle, but because we're coming from a new
// goroutine, there could be a new request coming in at the same time,
// so this simply calls the synchronized closeIfIdle to shut down this
@@ -809,8 +809,8 @@ func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) {
// 2xx, however, then assume the server DOES potentially
// want our body (e.g. full-duplex streaming:
// golang.org/issue/13444). If it turns out the server
- // doesn't, they'll RST_STREAM us soon enough. This is a
- // heuristic to avoid adding knobs to Transport. Hopefully
+ // doesn't, they'll RST_STREAM us soon enough. This is a
+ // heuristic to avoid adding knobs to Transport. Hopefully
// we can keep it.
bodyWriter.cancel()
cs.abortRequestBodyWrite(errStopReqBodyWrite)
@@ -1528,8 +1528,7 @@ func (rl *clientConnReadLoop) handleResponse(cs *clientStream, f *MetaHeadersFra
return res, nil
}
- buf := new(bytes.Buffer) // TODO(bradfitz): recycle this garbage
- cs.bufPipe = pipe{b: buf}
+ cs.bufPipe = pipe{b: &dataBuffer{expected: res.ContentLength}}
cs.bytesRemain = res.ContentLength
res.Body = transportResponseBody{cs}
go cs.awaitRequestCancel(cs.req)
diff --git a/vendor/golang.org/x/net/http2/transport_test.go b/vendor/golang.org/x/net/http2/transport_test.go
index 8ef4f3388..7ae8ff787 100644
--- a/vendor/golang.org/x/net/http2/transport_test.go
+++ b/vendor/golang.org/x/net/http2/transport_test.go
@@ -2406,7 +2406,7 @@ func TestTransportReturnsDataPaddingFlowControl(t *testing.T) {
EndStream: false,
BlockFragment: buf.Bytes(),
})
- pad := []byte("12345")
+ pad := make([]byte, 5)
ct.fr.WriteDataPadded(hf.StreamID, false, make([]byte, 5000), pad) // without ending stream
f, err := ct.readNonSettingsFrame()
diff --git a/vendor/golang.org/x/net/internal/netreflect/socket.go b/vendor/golang.org/x/net/internal/netreflect/socket.go
index e82e51c44..1495b65f5 100644
--- a/vendor/golang.org/x/net/internal/netreflect/socket.go
+++ b/vendor/golang.org/x/net/internal/netreflect/socket.go
@@ -2,8 +2,12 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
+// +build !go1.9
+
// Package netreflect implements run-time reflection for the
// facilities of net package.
+//
+// This package works only for Go 1.8 or below.
package netreflect
import (
diff --git a/vendor/golang.org/x/net/internal/netreflect/socket_19.go b/vendor/golang.org/x/net/internal/netreflect/socket_19.go
new file mode 100644
index 000000000..74df52e1a
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/netreflect/socket_19.go
@@ -0,0 +1,37 @@
+// 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.
+
+// +build go1.9
+
+package netreflect
+
+import (
+ "errors"
+ "net"
+)
+
+var (
+ errInvalidType = errors.New("invalid type")
+ errOpNoSupport = errors.New("operation not supported")
+)
+
+// SocketOf returns the socket descriptor of c.
+func SocketOf(c net.Conn) (uintptr, error) {
+ switch c.(type) {
+ case *net.TCPConn, *net.UDPConn, *net.IPConn, *net.UnixConn:
+ return 0, errOpNoSupport
+ default:
+ return 0, errInvalidType
+ }
+}
+
+// PacketSocketOf returns the socket descriptor of c.
+func PacketSocketOf(c net.PacketConn) (uintptr, error) {
+ switch c.(type) {
+ case *net.UDPConn, *net.IPConn, *net.UnixConn:
+ return 0, errOpNoSupport
+ default:
+ return 0, errInvalidType
+ }
+}
diff --git a/vendor/golang.org/x/net/internal/netreflect/socket_posix.go b/vendor/golang.org/x/net/internal/netreflect/socket_posix.go
index df475a2b2..410c0924d 100644
--- a/vendor/golang.org/x/net/internal/netreflect/socket_posix.go
+++ b/vendor/golang.org/x/net/internal/netreflect/socket_posix.go
@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
+// +build !go1.9
// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows
package netreflect
diff --git a/vendor/golang.org/x/net/internal/netreflect/socket_stub.go b/vendor/golang.org/x/net/internal/netreflect/socket_stub.go
index 85adb4b7f..17b20c478 100644
--- a/vendor/golang.org/x/net/internal/netreflect/socket_stub.go
+++ b/vendor/golang.org/x/net/internal/netreflect/socket_stub.go
@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
+// +build !go1.9
// +build !darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris,!windows
package netreflect
diff --git a/vendor/golang.org/x/net/internal/netreflect/socket_test.go b/vendor/golang.org/x/net/internal/netreflect/socket_test.go
index 49b97ed54..b3aad0d92 100644
--- a/vendor/golang.org/x/net/internal/netreflect/socket_test.go
+++ b/vendor/golang.org/x/net/internal/netreflect/socket_test.go
@@ -2,6 +2,9 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
+// +build !go1.9
+// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows
+
package netreflect_test
import (
diff --git a/vendor/golang.org/x/net/internal/timeseries/timeseries.go b/vendor/golang.org/x/net/internal/timeseries/timeseries.go
index 1119f3448..685f0e7ea 100644
--- a/vendor/golang.org/x/net/internal/timeseries/timeseries.go
+++ b/vendor/golang.org/x/net/internal/timeseries/timeseries.go
@@ -371,7 +371,7 @@ func (ts *timeSeries) ComputeRange(start, finish time.Time, num int) []Observabl
}
}
- // Failed to find a level that covers the desired range. So just
+ // Failed to find a level that covers the desired range. So just
// extract from the last level, even if it doesn't cover the entire
// desired range.
ts.extract(ts.levels[len(ts.levels)-1], start, finish, num, results)
diff --git a/vendor/golang.org/x/net/ipv4/doc.go b/vendor/golang.org/x/net/ipv4/doc.go
index b4ce40fbc..b43935a5a 100644
--- a/vendor/golang.org/x/net/ipv4/doc.go
+++ b/vendor/golang.org/x/net/ipv4/doc.go
@@ -21,7 +21,7 @@
//
// The options for unicasting are available for net.TCPConn,
// net.UDPConn and net.IPConn which are created as network connections
-// that use the IPv4 transport. When a single TCP connection carrying
+// that use the IPv4 transport. When a single TCP connection carrying
// a data flow of multiple packets needs to indicate the flow is
// important, Conn is used to set the type-of-service field on the
// IPv4 header for each packet.
@@ -56,7 +56,7 @@
//
// The options for multicasting are available for net.UDPConn and
// net.IPconn which are created as network connections that use the
-// IPv4 transport. A few network facilities must be prepared before
+// IPv4 transport. A few network facilities must be prepared before
// you begin multicasting, at a minimum joining network interfaces and
// multicast groups.
//
@@ -80,7 +80,7 @@
// defer c.Close()
//
// Second, the application joins multicast groups, starts listening to
-// the groups on the specified network interfaces. Note that the
+// the groups on the specified network interfaces. Note that the
// service port for transport layer protocol does not matter with this
// operation as joining groups affects only network and link layer
// protocols, such as IPv4 and Ethernet.
@@ -94,7 +94,7 @@
// }
//
// The application might set per packet control message transmissions
-// between the protocol stack within the kernel. When the application
+// between the protocol stack within the kernel. When the application
// needs a destination address on an incoming packet,
// SetControlMessage of PacketConn is used to enable control message
// transmissions.
@@ -145,7 +145,7 @@
// More multicasting
//
// An application that uses PacketConn or RawConn may join multiple
-// multicast groups. For example, a UDP listener with port 1024 might
+// multicast groups. For example, a UDP listener with port 1024 might
// join two different groups across over two different network
// interfaces by using:
//
@@ -166,7 +166,7 @@
// }
//
// It is possible for multiple UDP listeners that listen on the same
-// UDP port to join the same multicast group. The net package will
+// UDP port to join the same multicast group. The net package will
// provide a socket that listens to a wildcard address with reusable
// UDP port when an appropriate multicast address prefix is passed to
// the net.ListenPacket or net.ListenUDP.
diff --git a/vendor/golang.org/x/net/ipv4/endpoint.go b/vendor/golang.org/x/net/ipv4/endpoint.go
index 01c4e399b..8f7e07ac4 100644
--- a/vendor/golang.org/x/net/ipv4/endpoint.go
+++ b/vendor/golang.org/x/net/ipv4/endpoint.go
@@ -38,8 +38,8 @@ func NewConn(c net.Conn) *Conn {
}
// A PacketConn represents a packet network endpoint that uses the
-// IPv4 transport. It is used to control several IP-level socket
-// options including multicasting. It also provides datagram based
+// IPv4 transport. It is used to control several IP-level socket
+// options including multicasting. It also provides datagram based
// network I/O methods specific to the IPv4 and higher layer protocols
// such as UDP.
type PacketConn struct {
@@ -118,8 +118,8 @@ func NewPacketConn(c net.PacketConn) *PacketConn {
}
// A RawConn represents a packet network endpoint that uses the IPv4
-// transport. It is used to control several IP-level socket options
-// including IPv4 header manipulation. It also provides datagram
+// transport. It is used to control several IP-level socket options
+// including IPv4 header manipulation. It also provides datagram
// based network I/O methods specific to the IPv4 and higher layer
// protocols that handle IPv4 datagram directly such as OSPF, GRE.
type RawConn struct {
diff --git a/vendor/golang.org/x/net/ipv4/go19_test.go b/vendor/golang.org/x/net/ipv4/go19_test.go
new file mode 100644
index 000000000..82a27b113
--- /dev/null
+++ b/vendor/golang.org/x/net/ipv4/go19_test.go
@@ -0,0 +1,11 @@
+// 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.
+
+// +build go1.9
+
+package ipv4
+
+func init() {
+ disableTests = true
+}
diff --git a/vendor/golang.org/x/net/ipv4/ipv4_test.go b/vendor/golang.org/x/net/ipv4/ipv4_test.go
new file mode 100644
index 000000000..917299283
--- /dev/null
+++ b/vendor/golang.org/x/net/ipv4/ipv4_test.go
@@ -0,0 +1,22 @@
+// 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 ipv4
+
+import (
+ "fmt"
+ "os"
+ "testing"
+)
+
+var disableTests = false
+
+func TestMain(m *testing.M) {
+ if disableTests {
+ fmt.Fprintf(os.Stderr, "ipv4 tests disabled in Go 1.9 until netreflect is fixed. (Issue 19051)\n")
+ os.Exit(0)
+ }
+ // call flag.Parse() here if TestMain uses flags
+ os.Exit(m.Run())
+}
diff --git a/vendor/golang.org/x/net/ipv4/packet.go b/vendor/golang.org/x/net/ipv4/packet.go
index 7f3bf4898..d43723ca9 100644
--- a/vendor/golang.org/x/net/ipv4/packet.go
+++ b/vendor/golang.org/x/net/ipv4/packet.go
@@ -21,7 +21,7 @@ type packetHandler struct {
func (c *packetHandler) ok() bool { return c != nil && c.c != nil }
// ReadFrom reads an IPv4 datagram from the endpoint c, copying the
-// datagram into b. It returns the received datagram as the IPv4
+// datagram into b. It returns the received datagram as the IPv4
// header h, the payload p and the control message cm.
func (c *packetHandler) ReadFrom(b []byte) (h *Header, p []byte, cm *ControlMessage, err error) {
if !c.ok() {
@@ -57,9 +57,9 @@ func slicePacket(b []byte) (h, p []byte, err error) {
}
// WriteTo writes an IPv4 datagram through the endpoint c, copying the
-// datagram from the IPv4 header h and the payload p. The control
+// datagram from the IPv4 header h and the payload p. The control
// message cm allows the datagram path and the outgoing interface to be
-// specified. Currently only Darwin and Linux support this. The cm
+// specified. Currently only Darwin and Linux support this. The cm
// may be nil if control of the outgoing datagram is not required.
//
// The IPv4 header h must contain appropriate fields that include:
diff --git a/vendor/golang.org/x/net/ipv4/payload_cmsg.go b/vendor/golang.org/x/net/ipv4/payload_cmsg.go
index 9bcde8f9a..5e6e55c20 100644
--- a/vendor/golang.org/x/net/ipv4/payload_cmsg.go
+++ b/vendor/golang.org/x/net/ipv4/payload_cmsg.go
@@ -12,7 +12,7 @@ import (
)
// ReadFrom reads a payload of the received IPv4 datagram, from the
-// endpoint c, copying the payload into b. It returns the number of
+// endpoint c, copying the payload into b. It returns the number of
// bytes copied into b, the control message cm and the source address
// src of the received datagram.
func (c *payloadHandler) ReadFrom(b []byte) (n int, cm *ControlMessage, src net.Addr, err error) {
@@ -53,10 +53,10 @@ func (c *payloadHandler) ReadFrom(b []byte) (n int, cm *ControlMessage, src net.
}
// WriteTo writes a payload of the IPv4 datagram, to the destination
-// address dst through the endpoint c, copying the payload from b. It
-// returns the number of bytes written. The control message cm allows
+// address dst through the endpoint c, copying the payload from b. It
+// returns the number of bytes written. The control message cm allows
// the datagram path and the outgoing interface to be specified.
-// Currently only Darwin and Linux support this. The cm may be nil if
+// Currently only Darwin and Linux support this. The cm may be nil if
// control of the outgoing datagram is not required.
func (c *payloadHandler) WriteTo(b []byte, cm *ControlMessage, dst net.Addr) (n int, err error) {
if !c.ok() {
diff --git a/vendor/golang.org/x/net/ipv4/payload_nocmsg.go b/vendor/golang.org/x/net/ipv4/payload_nocmsg.go
index 6f1b402f7..6f9d5b0ef 100644
--- a/vendor/golang.org/x/net/ipv4/payload_nocmsg.go
+++ b/vendor/golang.org/x/net/ipv4/payload_nocmsg.go
@@ -12,7 +12,7 @@ import (
)
// ReadFrom reads a payload of the received IPv4 datagram, from the
-// endpoint c, copying the payload into b. It returns the number of
+// endpoint c, copying the payload into b. It returns the number of
// bytes copied into b, the control message cm and the source address
// src of the received datagram.
func (c *payloadHandler) ReadFrom(b []byte) (n int, cm *ControlMessage, src net.Addr, err error) {
@@ -26,10 +26,10 @@ func (c *payloadHandler) ReadFrom(b []byte) (n int, cm *ControlMessage, src net.
}
// WriteTo writes a payload of the IPv4 datagram, to the destination
-// address dst through the endpoint c, copying the payload from b. It
-// returns the number of bytes written. The control message cm allows
+// address dst through the endpoint c, copying the payload from b. It
+// returns the number of bytes written. The control message cm allows
// the datagram path and the outgoing interface to be specified.
-// Currently only Darwin and Linux support this. The cm may be nil if
+// Currently only Darwin and Linux support this. The cm may be nil if
// control of the outgoing datagram is not required.
func (c *payloadHandler) WriteTo(b []byte, cm *ControlMessage, dst net.Addr) (n int, err error) {
if !c.ok() {
diff --git a/vendor/golang.org/x/net/ipv6/control.go b/vendor/golang.org/x/net/ipv6/control.go
index 56303f08d..674628d3f 100644
--- a/vendor/golang.org/x/net/ipv6/control.go
+++ b/vendor/golang.org/x/net/ipv6/control.go
@@ -11,7 +11,7 @@ import (
)
// Note that RFC 3542 obsoletes RFC 2292 but OS X Snow Leopard and the
-// former still support RFC 2292 only. Please be aware that almost
+// former still support RFC 2292 only. Please be aware that almost
// all protocol implementations prohibit using a combination of RFC
// 2292 and RFC 3542 for some practical reasons.
diff --git a/vendor/golang.org/x/net/ipv6/dgramopt_posix.go b/vendor/golang.org/x/net/ipv6/dgramopt_posix.go
index 571430848..a448cbaa5 100644
--- a/vendor/golang.org/x/net/ipv6/dgramopt_posix.go
+++ b/vendor/golang.org/x/net/ipv6/dgramopt_posix.go
@@ -227,7 +227,7 @@ func (c *dgramOpt) IncludeSourceSpecificGroup(ifi *net.Interface, group, source
}
// Checksum reports whether the kernel will compute, store or verify a
-// checksum for both incoming and outgoing packets. If on is true, it
+// checksum for both incoming and outgoing packets. If on is true, it
// returns an offset in bytes into the data of where the checksum
// field is located.
func (c *dgramOpt) Checksum() (on bool, offset int, err error) {
@@ -248,7 +248,7 @@ func (c *dgramOpt) Checksum() (on bool, offset int, err error) {
return true, offset, nil
}
-// SetChecksum enables the kernel checksum processing. If on is ture,
+// SetChecksum enables the kernel checksum processing. If on is ture,
// the offset should be an offset in bytes into the data of where the
// checksum field is located.
func (c *dgramOpt) SetChecksum(on bool, offset int) error {
diff --git a/vendor/golang.org/x/net/ipv6/dgramopt_stub.go b/vendor/golang.org/x/net/ipv6/dgramopt_stub.go
index bc3290ad8..82b0686ae 100644
--- a/vendor/golang.org/x/net/ipv6/dgramopt_stub.go
+++ b/vendor/golang.org/x/net/ipv6/dgramopt_stub.go
@@ -94,14 +94,14 @@ func (c *dgramOpt) IncludeSourceSpecificGroup(ifi *net.Interface, group, source
}
// Checksum reports whether the kernel will compute, store or verify a
-// checksum for both incoming and outgoing packets. If on is true, it
+// checksum for both incoming and outgoing packets. If on is true, it
// returns an offset in bytes into the data of where the checksum
// field is located.
func (c *dgramOpt) Checksum() (on bool, offset int, err error) {
return false, 0, errOpNoSupport
}
-// SetChecksum enables the kernel checksum processing. If on is ture,
+// SetChecksum enables the kernel checksum processing. If on is ture,
// the offset should be an offset in bytes into the data of where the
// checksum field is located.
func (c *dgramOpt) SetChecksum(on bool, offset int) error {
diff --git a/vendor/golang.org/x/net/ipv6/doc.go b/vendor/golang.org/x/net/ipv6/doc.go
index 88383e915..eaa24c580 100644
--- a/vendor/golang.org/x/net/ipv6/doc.go
+++ b/vendor/golang.org/x/net/ipv6/doc.go
@@ -22,7 +22,7 @@
//
// The options for unicasting are available for net.TCPConn,
// net.UDPConn and net.IPConn which are created as network connections
-// that use the IPv6 transport. When a single TCP connection carrying
+// that use the IPv6 transport. When a single TCP connection carrying
// a data flow of multiple packets needs to indicate the flow is
// important, Conn is used to set the traffic class field on the IPv6
// header for each packet.
@@ -57,7 +57,7 @@
//
// The options for multicasting are available for net.UDPConn and
// net.IPconn which are created as network connections that use the
-// IPv6 transport. A few network facilities must be prepared before
+// IPv6 transport. A few network facilities must be prepared before
// you begin multicasting, at a minimum joining network interfaces and
// multicast groups.
//
@@ -81,7 +81,7 @@
// defer c.Close()
//
// Second, the application joins multicast groups, starts listening to
-// the groups on the specified network interfaces. Note that the
+// the groups on the specified network interfaces. Note that the
// service port for transport layer protocol does not matter with this
// operation as joining groups affects only network and link layer
// protocols, such as IPv6 and Ethernet.
@@ -95,7 +95,7 @@
// }
//
// The application might set per packet control message transmissions
-// between the protocol stack within the kernel. When the application
+// between the protocol stack within the kernel. When the application
// needs a destination address on an incoming packet,
// SetControlMessage of PacketConn is used to enable control message
// transmissions.
@@ -144,7 +144,7 @@
// More multicasting
//
// An application that uses PacketConn may join multiple multicast
-// groups. For example, a UDP listener with port 1024 might join two
+// groups. For example, a UDP listener with port 1024 might join two
// different groups across over two different network interfaces by
// using:
//
@@ -165,7 +165,7 @@
// }
//
// It is possible for multiple UDP listeners that listen on the same
-// UDP port to join the same multicast group. The net package will
+// UDP port to join the same multicast group. The net package will
// provide a socket that listens to a wildcard address with reusable
// UDP port when an appropriate multicast address prefix is passed to
// the net.ListenPacket or net.ListenUDP.
diff --git a/vendor/golang.org/x/net/ipv6/endpoint.go b/vendor/golang.org/x/net/ipv6/endpoint.go
index f6a68ab41..ce0b0ce27 100644
--- a/vendor/golang.org/x/net/ipv6/endpoint.go
+++ b/vendor/golang.org/x/net/ipv6/endpoint.go
@@ -55,8 +55,8 @@ func NewConn(c net.Conn) *Conn {
}
// A PacketConn represents a packet network endpoint that uses IPv6
-// transport. It is used to control several IP-level socket options
-// including IPv6 header manipulation. It also provides datagram
+// transport. It is used to control several IP-level socket options
+// including IPv6 header manipulation. It also provides datagram
// based network I/O methods specific to the IPv6 and higher layer
// protocols such as OSPF, GRE, and UDP.
type PacketConn struct {
diff --git a/vendor/golang.org/x/net/ipv6/go19_test.go b/vendor/golang.org/x/net/ipv6/go19_test.go
new file mode 100644
index 000000000..c7cb057d2
--- /dev/null
+++ b/vendor/golang.org/x/net/ipv6/go19_test.go
@@ -0,0 +1,11 @@
+// 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.
+
+// +build go1.9
+
+package ipv6
+
+func init() {
+ disableTests = true
+}
diff --git a/vendor/golang.org/x/net/ipv6/ipv6_test.go b/vendor/golang.org/x/net/ipv6/ipv6_test.go
new file mode 100644
index 000000000..8d2d23542
--- /dev/null
+++ b/vendor/golang.org/x/net/ipv6/ipv6_test.go
@@ -0,0 +1,22 @@
+// 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 ipv6
+
+import (
+ "fmt"
+ "os"
+ "testing"
+)
+
+var disableTests = false
+
+func TestMain(m *testing.M) {
+ if disableTests {
+ fmt.Fprintf(os.Stderr, "ipv6 tests disabled in Go 1.9 until netreflect is fixed (Issue 19051)\n")
+ os.Exit(0)
+ }
+ // call flag.Parse() here if TestMain uses flags
+ os.Exit(m.Run())
+}
diff --git a/vendor/golang.org/x/net/ipv6/payload_cmsg.go b/vendor/golang.org/x/net/ipv6/payload_cmsg.go
index 3a33585ef..e853c8059 100644
--- a/vendor/golang.org/x/net/ipv6/payload_cmsg.go
+++ b/vendor/golang.org/x/net/ipv6/payload_cmsg.go
@@ -12,7 +12,7 @@ import (
)
// ReadFrom reads a payload of the received IPv6 datagram, from the
-// endpoint c, copying the payload into b. It returns the number of
+// endpoint c, copying the payload into b. It returns the number of
// bytes copied into b, the control message cm and the source address
// src of the received datagram.
func (c *payloadHandler) ReadFrom(b []byte) (n int, cm *ControlMessage, src net.Addr, err error) {
@@ -43,9 +43,9 @@ func (c *payloadHandler) ReadFrom(b []byte) (n int, cm *ControlMessage, src net.
}
// WriteTo writes a payload of the IPv6 datagram, to the destination
-// address dst through the endpoint c, copying the payload from b. It
-// returns the number of bytes written. The control message cm allows
-// the IPv6 header fields and the datagram path to be specified. The
+// address dst through the endpoint c, copying the payload from b. It
+// returns the number of bytes written. The control message cm allows
+// the IPv6 header fields and the datagram path to be specified. The
// cm may be nil if control of the outgoing datagram is not required.
func (c *payloadHandler) WriteTo(b []byte, cm *ControlMessage, dst net.Addr) (n int, err error) {
if !c.ok() {
diff --git a/vendor/golang.org/x/net/ipv6/payload_nocmsg.go b/vendor/golang.org/x/net/ipv6/payload_nocmsg.go
index 9731cba43..99a43542b 100644
--- a/vendor/golang.org/x/net/ipv6/payload_nocmsg.go
+++ b/vendor/golang.org/x/net/ipv6/payload_nocmsg.go
@@ -12,7 +12,7 @@ import (
)
// ReadFrom reads a payload of the received IPv6 datagram, from the
-// endpoint c, copying the payload into b. It returns the number of
+// endpoint c, copying the payload into b. It returns the number of
// bytes copied into b, the control message cm and the source address
// src of the received datagram.
func (c *payloadHandler) ReadFrom(b []byte) (n int, cm *ControlMessage, src net.Addr, err error) {
@@ -26,9 +26,9 @@ func (c *payloadHandler) ReadFrom(b []byte) (n int, cm *ControlMessage, src net.
}
// WriteTo writes a payload of the IPv6 datagram, to the destination
-// address dst through the endpoint c, copying the payload from b. It
-// returns the number of bytes written. The control message cm allows
-// the IPv6 header fields and the datagram path to be specified. The
+// address dst through the endpoint c, copying the payload from b. It
+// returns the number of bytes written. The control message cm allows
+// the IPv6 header fields and the datagram path to be specified. The
// cm may be nil if control of the outgoing datagram is not required.
func (c *payloadHandler) WriteTo(b []byte, cm *ControlMessage, dst net.Addr) (n int, err error) {
if !c.ok() {
diff --git a/vendor/golang.org/x/net/lif/address.go b/vendor/golang.org/x/net/lif/address.go
index f9b34aed0..afb957fd8 100644
--- a/vendor/golang.org/x/net/lif/address.go
+++ b/vendor/golang.org/x/net/lif/address.go
@@ -67,7 +67,7 @@ func Addrs(af int, name string) ([]Addr, error) {
continue
}
sa := (*sockaddrStorage)(unsafe.Pointer(&lifr.Lifru[0]))
- l := int(littleEndian.Uint32(lifr.Lifru1[:4]))
+ l := int(nativeEndian.Uint32(lifr.Lifru1[:4]))
if l == 0 {
continue
}
@@ -77,7 +77,7 @@ func Addrs(af int, name string) ([]Addr, error) {
copy(a.IP[:], lifr.Lifru[4:8])
as = append(as, a)
case sysAF_INET6:
- a := &Inet6Addr{PrefixLen: l, ZoneID: int(littleEndian.Uint32(lifr.Lifru[24:28]))}
+ a := &Inet6Addr{PrefixLen: l, ZoneID: int(nativeEndian.Uint32(lifr.Lifru[24:28]))}
copy(a.IP[:], lifr.Lifru[8:24])
as = append(as, a)
}
diff --git a/vendor/golang.org/x/net/lif/binary.go b/vendor/golang.org/x/net/lif/binary.go
index aade9eafa..738a94f42 100644
--- a/vendor/golang.org/x/net/lif/binary.go
+++ b/vendor/golang.org/x/net/lif/binary.go
@@ -12,7 +12,10 @@ package lif
// library. Therefore the package set used in the package must be the
// same as net package.
-var littleEndian binaryLittleEndian
+var (
+ littleEndian binaryLittleEndian
+ bigEndian binaryBigEndian
+)
type binaryByteOrder interface {
Uint16([]byte) uint16
@@ -66,3 +69,47 @@ func (binaryLittleEndian) PutUint64(b []byte, v uint64) {
b[6] = byte(v >> 48)
b[7] = byte(v >> 56)
}
+
+type binaryBigEndian struct{}
+
+func (binaryBigEndian) Uint16(b []byte) uint16 {
+ _ = b[1] // bounds check hint to compiler; see golang.org/issue/14808
+ return uint16(b[1]) | uint16(b[0])<<8
+}
+
+func (binaryBigEndian) PutUint16(b []byte, v uint16) {
+ _ = b[1] // early bounds check to guarantee safety of writes below
+ b[0] = byte(v >> 8)
+ b[1] = byte(v)
+}
+
+func (binaryBigEndian) Uint32(b []byte) uint32 {
+ _ = b[3] // bounds check hint to compiler; see golang.org/issue/14808
+ return uint32(b[3]) | uint32(b[2])<<8 | uint32(b[1])<<16 | uint32(b[0])<<24
+}
+
+func (binaryBigEndian) PutUint32(b []byte, v uint32) {
+ _ = b[3] // early bounds check to guarantee safety of writes below
+ b[0] = byte(v >> 24)
+ b[1] = byte(v >> 16)
+ b[2] = byte(v >> 8)
+ b[3] = byte(v)
+}
+
+func (binaryBigEndian) Uint64(b []byte) uint64 {
+ _ = b[7] // bounds check hint to compiler; see golang.org/issue/14808
+ return uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 |
+ uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56
+}
+
+func (binaryBigEndian) PutUint64(b []byte, v uint64) {
+ _ = b[7] // early bounds check to guarantee safety of writes below
+ b[0] = byte(v >> 56)
+ b[1] = byte(v >> 48)
+ b[2] = byte(v >> 40)
+ b[3] = byte(v >> 32)
+ b[4] = byte(v >> 24)
+ b[5] = byte(v >> 16)
+ b[6] = byte(v >> 8)
+ b[7] = byte(v)
+}
diff --git a/vendor/golang.org/x/net/lif/link.go b/vendor/golang.org/x/net/lif/link.go
index 76fa6c687..fce6b2147 100644
--- a/vendor/golang.org/x/net/lif/link.go
+++ b/vendor/golang.org/x/net/lif/link.go
@@ -31,15 +31,15 @@ func (ll *Link) fetch(s uintptr) {
}
ioc := int64(sysSIOCGLIFINDEX)
if err := ioctl(s, uintptr(ioc), unsafe.Pointer(&lifr)); err == nil {
- ll.Index = int(littleEndian.Uint32(lifr.Lifru[:4]))
+ ll.Index = int(nativeEndian.Uint32(lifr.Lifru[:4]))
}
ioc = int64(sysSIOCGLIFFLAGS)
if err := ioctl(s, uintptr(ioc), unsafe.Pointer(&lifr)); err == nil {
- ll.Flags = int(littleEndian.Uint64(lifr.Lifru[:8]))
+ ll.Flags = int(nativeEndian.Uint64(lifr.Lifru[:8]))
}
ioc = int64(sysSIOCGLIFMTU)
if err := ioctl(s, uintptr(ioc), unsafe.Pointer(&lifr)); err == nil {
- ll.MTU = int(littleEndian.Uint32(lifr.Lifru[:4]))
+ ll.MTU = int(nativeEndian.Uint32(lifr.Lifru[:4]))
}
switch ll.Type {
case sysIFT_IPV4, sysIFT_IPV6, sysIFT_6TO4:
@@ -84,7 +84,11 @@ func links(eps []endpoint, name string) ([]Link, error) {
b := make([]byte, lifn.Count*sizeofLifreq)
lifc.Family = uint16(ep.af)
lifc.Len = lifn.Count * sizeofLifreq
- littleEndian.PutUint64(lifc.Lifcu[:], uint64(uintptr(unsafe.Pointer(&b[0]))))
+ if len(lifc.Lifcu) == 8 {
+ nativeEndian.PutUint64(lifc.Lifcu[:], uint64(uintptr(unsafe.Pointer(&b[0]))))
+ } else {
+ nativeEndian.PutUint32(lifc.Lifcu[:], uint32(uintptr(unsafe.Pointer(&b[0]))))
+ }
ioc = int64(sysSIOCGLIFCONF)
if err := ioctl(ep.s, uintptr(ioc), unsafe.Pointer(&lifc)); err != nil {
continue
diff --git a/vendor/golang.org/x/net/lif/sys.go b/vendor/golang.org/x/net/lif/sys.go
new file mode 100644
index 000000000..c896041b7
--- /dev/null
+++ b/vendor/golang.org/x/net/lif/sys.go
@@ -0,0 +1,21 @@
+// 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.
+
+// +build solaris
+
+package lif
+
+import "unsafe"
+
+var nativeEndian binaryByteOrder
+
+func init() {
+ i := uint32(1)
+ b := (*[4]byte)(unsafe.Pointer(&i))
+ if b[0] == 1 {
+ nativeEndian = littleEndian
+ } else {
+ nativeEndian = bigEndian
+ }
+}
diff --git a/vendor/golang.org/x/net/lif/sys_solaris_amd64.s b/vendor/golang.org/x/net/lif/sys_solaris_amd64.s
index 1ebca3739..39d76af79 100644
--- a/vendor/golang.org/x/net/lif/sys_solaris_amd64.s
+++ b/vendor/golang.org/x/net/lif/sys_solaris_amd64.s
@@ -6,6 +6,3 @@
TEXT ·sysvicall6(SB),NOSPLIT,$0-88
JMP syscall·sysvicall6(SB)
-
-TEXT ·keepAlive(SB),NOSPLIT,$0
- RET
diff --git a/vendor/golang.org/x/net/lif/syscall.go b/vendor/golang.org/x/net/lif/syscall.go
index 5fe073620..aadab2e14 100644
--- a/vendor/golang.org/x/net/lif/syscall.go
+++ b/vendor/golang.org/x/net/lif/syscall.go
@@ -19,13 +19,8 @@ var procIoctl uintptr
func sysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (uintptr, uintptr, syscall.Errno)
-// TODO: replace with runtime.KeepAlive when available
-//go:noescape
-func keepAlive(p unsafe.Pointer)
-
func ioctl(s, ioc uintptr, arg unsafe.Pointer) error {
_, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procIoctl)), 3, s, ioc, uintptr(arg), 0, 0, 0)
- keepAlive(arg)
if errno != 0 {
return error(errno)
}
diff --git a/vendor/golang.org/x/net/proxy/socks5.go b/vendor/golang.org/x/net/proxy/socks5.go
index 9b9628239..973f57f19 100644
--- a/vendor/golang.org/x/net/proxy/socks5.go
+++ b/vendor/golang.org/x/net/proxy/socks5.go
@@ -72,24 +72,28 @@ func (s *socks5) Dial(network, addr string) (net.Conn, error) {
if err != nil {
return nil, err
}
- closeConn := &conn
- defer func() {
- if closeConn != nil {
- (*closeConn).Close()
- }
- }()
+ if err := s.connect(conn, addr); err != nil {
+ conn.Close()
+ return nil, err
+ }
+ return conn, nil
+}
- host, portStr, err := net.SplitHostPort(addr)
+// connect takes an existing connection to a socks5 proxy server,
+// and commands the server to extend that connection to target,
+// which must be a canonical address with a host and port.
+func (s *socks5) connect(conn net.Conn, target string) error {
+ host, portStr, err := net.SplitHostPort(target)
if err != nil {
- return nil, err
+ return err
}
port, err := strconv.Atoi(portStr)
if err != nil {
- return nil, errors.New("proxy: failed to parse port number: " + portStr)
+ return errors.New("proxy: failed to parse port number: " + portStr)
}
if port < 1 || port > 0xffff {
- return nil, errors.New("proxy: port number out of range: " + portStr)
+ return errors.New("proxy: port number out of range: " + portStr)
}
// the size here is just an estimate
@@ -103,17 +107,17 @@ func (s *socks5) Dial(network, addr string) (net.Conn, error) {
}
if _, err := conn.Write(buf); err != nil {
- return nil, errors.New("proxy: failed to write greeting to SOCKS5 proxy at " + s.addr + ": " + err.Error())
+ return errors.New("proxy: failed to write greeting to SOCKS5 proxy at " + s.addr + ": " + err.Error())
}
if _, err := io.ReadFull(conn, buf[:2]); err != nil {
- return nil, errors.New("proxy: failed to read greeting from SOCKS5 proxy at " + s.addr + ": " + err.Error())
+ return errors.New("proxy: failed to read greeting from SOCKS5 proxy at " + s.addr + ": " + err.Error())
}
if buf[0] != 5 {
- return nil, errors.New("proxy: SOCKS5 proxy at " + s.addr + " has unexpected version " + strconv.Itoa(int(buf[0])))
+ return errors.New("proxy: SOCKS5 proxy at " + s.addr + " has unexpected version " + strconv.Itoa(int(buf[0])))
}
if buf[1] == 0xff {
- return nil, errors.New("proxy: SOCKS5 proxy at " + s.addr + " requires authentication")
+ return errors.New("proxy: SOCKS5 proxy at " + s.addr + " requires authentication")
}
if buf[1] == socks5AuthPassword {
@@ -125,15 +129,15 @@ func (s *socks5) Dial(network, addr string) (net.Conn, error) {
buf = append(buf, s.password...)
if _, err := conn.Write(buf); err != nil {
- return nil, errors.New("proxy: failed to write authentication request to SOCKS5 proxy at " + s.addr + ": " + err.Error())
+ return errors.New("proxy: failed to write authentication request to SOCKS5 proxy at " + s.addr + ": " + err.Error())
}
if _, err := io.ReadFull(conn, buf[:2]); err != nil {
- return nil, errors.New("proxy: failed to read authentication reply from SOCKS5 proxy at " + s.addr + ": " + err.Error())
+ return errors.New("proxy: failed to read authentication reply from SOCKS5 proxy at " + s.addr + ": " + err.Error())
}
if buf[1] != 0 {
- return nil, errors.New("proxy: SOCKS5 proxy at " + s.addr + " rejected username/password")
+ return errors.New("proxy: SOCKS5 proxy at " + s.addr + " rejected username/password")
}
}
@@ -150,7 +154,7 @@ func (s *socks5) Dial(network, addr string) (net.Conn, error) {
buf = append(buf, ip...)
} else {
if len(host) > 255 {
- return nil, errors.New("proxy: destination hostname too long: " + host)
+ return errors.New("proxy: destination hostname too long: " + host)
}
buf = append(buf, socks5Domain)
buf = append(buf, byte(len(host)))
@@ -159,11 +163,11 @@ func (s *socks5) Dial(network, addr string) (net.Conn, error) {
buf = append(buf, byte(port>>8), byte(port))
if _, err := conn.Write(buf); err != nil {
- return nil, errors.New("proxy: failed to write connect request to SOCKS5 proxy at " + s.addr + ": " + err.Error())
+ return errors.New("proxy: failed to write connect request to SOCKS5 proxy at " + s.addr + ": " + err.Error())
}
if _, err := io.ReadFull(conn, buf[:4]); err != nil {
- return nil, errors.New("proxy: failed to read connect reply from SOCKS5 proxy at " + s.addr + ": " + err.Error())
+ return errors.New("proxy: failed to read connect reply from SOCKS5 proxy at " + s.addr + ": " + err.Error())
}
failure := "unknown error"
@@ -172,7 +176,7 @@ func (s *socks5) Dial(network, addr string) (net.Conn, error) {
}
if len(failure) > 0 {
- return nil, errors.New("proxy: SOCKS5 proxy at " + s.addr + " failed to connect: " + failure)
+ return errors.New("proxy: SOCKS5 proxy at " + s.addr + " failed to connect: " + failure)
}
bytesToDiscard := 0
@@ -184,11 +188,11 @@ func (s *socks5) Dial(network, addr string) (net.Conn, error) {
case socks5Domain:
_, err := io.ReadFull(conn, buf[:1])
if err != nil {
- return nil, errors.New("proxy: failed to read domain length from SOCKS5 proxy at " + s.addr + ": " + err.Error())
+ return errors.New("proxy: failed to read domain length from SOCKS5 proxy at " + s.addr + ": " + err.Error())
}
bytesToDiscard = int(buf[0])
default:
- return nil, errors.New("proxy: got unknown address type " + strconv.Itoa(int(buf[3])) + " from SOCKS5 proxy at " + s.addr)
+ return errors.New("proxy: got unknown address type " + strconv.Itoa(int(buf[3])) + " from SOCKS5 proxy at " + s.addr)
}
if cap(buf) < bytesToDiscard {
@@ -197,14 +201,13 @@ func (s *socks5) Dial(network, addr string) (net.Conn, error) {
buf = buf[:bytesToDiscard]
}
if _, err := io.ReadFull(conn, buf); err != nil {
- return nil, errors.New("proxy: failed to read address from SOCKS5 proxy at " + s.addr + ": " + err.Error())
+ return errors.New("proxy: failed to read address from SOCKS5 proxy at " + s.addr + ": " + err.Error())
}
// Also need to discard the port number
if _, err := io.ReadFull(conn, buf[:2]); err != nil {
- return nil, errors.New("proxy: failed to read port from SOCKS5 proxy at " + s.addr + ": " + err.Error())
+ return errors.New("proxy: failed to read port from SOCKS5 proxy at " + s.addr + ": " + err.Error())
}
- closeConn = nil
- return conn, nil
+ return nil
}
diff --git a/vendor/golang.org/x/net/publicsuffix/table.go b/vendor/golang.org/x/net/publicsuffix/table.go
index bf20c036b..5db1e6986 100644
--- a/vendor/golang.org/x/net/publicsuffix/table.go
+++ b/vendor/golang.org/x/net/publicsuffix/table.go
@@ -2,7 +2,7 @@
package publicsuffix
-const version = "publicsuffix.org's public_suffix_list.dat, git revision 915565885d0fbd25caf7d8b339cd3478f558da94 (2016-10-19T08:16:09Z)"
+const version = "publicsuffix.org's public_suffix_list.dat, git revision 45a2bf8ef3e22000fbe4bfa5f9252db41d777001 (2017-01-18T01:04:06Z)"
const (
nodesBitsChildren = 9
@@ -23,446 +23,447 @@ const (
)
// numTLD is the number of top level domains.
-const numTLD = 1553
+const numTLD = 1554
// Text is the combined text of all labels.
-const text = "biellaakesvuemieleccebieszczadygeyachimatainaircraftraeumtgerade" +
- "alstahaugesunderseaportsinfolldalaskanittedallasalleasinglesango" +
- "ppdalinzaintuitateshinanomachintaifun-dnsaliaskimitsubatamicable" +
- "-modembetsukuinuyamanouchikuhokuryugasakitaurayasudabievatmallor" +
- "cadaquesanjotateyamabifukagawalmartatsunobihorologyuzhno-sakhali" +
- "nskaszubybikedagestangebilbaogakievenesannaninomiyakonojoshkar-o" +
- "lawabillustrationirasakinvestmentsannohelplfinancialipetskatowic" +
- "ebiobirdartcenterprisesakikuchikuseikarugapartmentsanokatsushika" +
- "beeldengeluidunloppacificasinore-og-uvdalivornobirkenesoddtangen" +
- "ovarabirthplacebjarkoybjerkreimdbalatinorddalillyonagoyastronomy" +
- "asustor-elvdalwaysdatabaseballangenoamishirasatochigiessenebakke" +
- "shibechambagriculturennebudapest-a-la-masionativeamericanantique" +
- "s3-ap-northeast-2bjugnieznordlandunsantabarbarablockbusternidupo" +
- "ntariobloombergbauernrtattoolsztynsettlersantacruzsantafedextras" +
- "pace-to-rentalstomakomaibarabloxcmsanukis-a-candidatebluedaplier" +
- "neustarhubalestrandabergamoarekeymachineues3-us-west-1bmoattachm" +
- "entsaotomeloyalistjordalshalsenishiazais-a-catererbmsapodhalewis" +
- "millerbmweirbnpparibaselburgloppenzaogashimadachicagoboatsapporo" +
- "bnrwfarmsteadurbanamexhibitionishigotsukisosakitagawabomloanswat" +
- "ch-and-clockerbondurhamburgmbhartiffanybonnishiharabookingminaka" +
- "michiharabootsaratovalleaostatoilomzaporizhzheguris-a-celticsfan" +
- "ishiizunazukis-a-chefarsundvrcambridgestonewyorkshirecreationish" +
- "ikatakayamatsuzakis-a-conservativefsncfdvrdnsiskinkyotobetsumida" +
- "tlanticateringebudejjuedischesapeakebayernurembergmodenakanotodd" +
- "enishikatsuragithubusercontentaxihuanishikawazukanazawaboschaeff" +
- "lerdalorenskogmxfinitybostikatsuyamaseratis-a-cpadoval-daostaval" +
- "leybostonakijinsekikogentingrimstadwgripebotanicalgardenishimera" +
- "botanicgardenishinomiyashironobotanybouncemerckmsdnipropetrovskl" +
- "eppalmspringsakerbounty-fullensakerrypropertiesardegnamsosnowiec" +
- "atholicheltenham-radio-openair-traffic-controlleyboutiquebecngri" +
- "wataraidyndns-ipamperedchefashionishinoomotegovtgorybozentsujiie" +
- "bradescorporationishinoshimatta-varjjatjeldsundyndns-mailotenkaw" +
- "abrandywinevalleybrasiliabresciabrindisibenikebristolgaulardalot" +
- "tebritishcolumbialowiezaganquannefrankfurtjmaxxxjaworznowtvalled" +
- "-aostavangerbroadcastleclerchelyabinskypescaravantaabroadwaybrok" +
- "e-itjometlifeinsurancebrokerbronnoysundyndns-office-on-the-webca" +
- "mpobassociatesardiniabrothermesaverdeatnuorockartuzybrowsersafet" +
- "ymarketsarlottokorozawabrumunddalouvreitjxn--0trq7p7nnishiokoppe" +
- "gardyndns-picsarpsborgroks-thisayamanashiibaghdadultkmaxxn--11b4" +
- "c3dyndns-remotegildeskalmykiabrunelblagdenesnaaseralingenkainana" +
- "ejrietisalatinabenoboribetsucksarufutsunomiyawakasaikaitakoelnis" +
- "hitosashimizunaminamiashigarabrusselsasayamabruxellesaseboknowsi" +
- "tallowiczest-le-patrondheimperiabryanskodjeepostfoldnavyatkakami" +
- "gaharabrynewhampshirebungoonordreisa-geekaufenishiwakis-a-cubicl" +
- "e-slavellinotteroybuskerudinewhollandyndns-servercellikes-piedmo" +
- "ntblancomeeresaskatchewanggouvicenzabuzenissandnessjoenissayokos" +
- "hibahikariwanumatakazakis-a-democratmpanamabuzzgradyndns-weberli" +
- "ncolnissedalucaniabwhalingrondarbzhitomirkutskydivingrongacomput" +
- "erhistoryofscience-fictioncomsecuritytacticschulezajskddielddanu" +
- "orrikuzentakatajirissagamiharacondoshichinohealth-carereformitak" +
- "eharaconferenceconstructionconsuladoharuhrconsultanthropologycon" +
- "sultingvollutskfhappoumuenchencontactoyotomiyazakis-a-geekgalaxy" +
- "contemporaryarteducationalchikugojomedio-campidano-mediocampidan" +
- "omediocontractorskenconventureshinodesashibetsuikinderoycookingc" +
- "hannelveruminamibosogndaluxembourgujolstercoolkuszippodlasiellak" +
- "asamatsudovre-eikercoopencraftoyotsukaidownloadcopenhagencyclope" +
- "dichernovtsykkylvenetogakushimotoganewmexicoldwarmiamiastalowa-w" +
- "oladbrokesassaris-a-designerimarumorimachidacorsicagliaridagawal" +
- "tercorvettenrightathomegoodschwarzgwangjuifminamidaitomangotemba" +
- "ixadacosenzamamibuilderschmidtre-gauldaluxurycostumedizinhistori" +
- "scheschweizjcbnluzerncouchpotatofriesciencecentersciencehistoryc" +
- "ouncilvivano-frankivskhabarovskhakassiacouponscientistockholmest" +
- "randcoursescjohnsoncq-acranbrookuwanalyticscotlandcreditcardcred" +
- "itunioncremonashorokanaiecrewiiheyaizuwakamatsubushikusakadogawa" +
- "cricketrzyncrimeacrotonewspapercrownprovidercrsvparaglidingulenc" +
- "ruisescrapper-sitecryptonomichigangwoncuisinellajollamericanexpr" +
- "essexyculturalcentertainmentoyouracuneocupcakecxn--1ctwolominama" +
- "takkofuefukihabororostrowwlkpmgunmarnardalcymruovatoystre-slidre" +
- "ttozawacyonabarussiacyouthdfcbankzlguovdageaidnufcfanfieldfiguer" +
- "estaurantozsdefilateliafilminamiechizenfinalfinancefineartservef" +
- "tparisor-fronfinlandfinnoyfirebaseapparliamentranbyfirenzefirest" +
- "onexus-east-1firmdaleirfjordfishingolffanservegame-serverisignfi" +
- "tjarqhachiojiyahikobeatservehalflifestylefitnessettlementrani-an" +
- "dria-barletta-trani-andriafjalerflesbergflickragerotikamakurazak" +
- "irkeneservehttparmaflightservehumourflirumansionserveirchiryukyu" +
- "ragifuchukotkakegawassamukawataricohdavvenjargausdaluccapitalone" +
- "wjerseyflogintogurafloraflorencefloridafloristanohatakaharulvikh" +
- "arkovalledaostavernflorokunohealthcareerserveminecraftraniandria" +
- "barlettatraniandriaflowerservemp3utilitiesquarezzoologicalvinkle" +
- "in-addrammenuernbergdyniabogadocscbggfareastcoastaldefence-burgj" +
- "emnes3-ap-northeast-1kappleaseating-organicbcg12000emmafanconaga" +
- "wakayamadridvagsoyericsson-aptibleangaviikadenaamesjevuemielno-i" +
- "p6flynnhubalsfjordiscountysnes3-us-west-2fndfoodnetworkshoppingf" +
- "or-ourfor-someetnedalfor-theaterforexrothruheredstoneforgotdnser" +
- "vep2parocherkasyzrankoshigayaltaijis-a-greenforli-cesena-forlice" +
- "senaforlikescandyndns-at-workinggrouparservepicservequakeforsale" +
- "irvikhersonforsandasuoloftranoyfortmissoulan-udefenseljordfortwo" +
- "rthachirogatakamoriokamikitayamatotakadaforuminamifuranofosneser" +
- "vesarcasmatartanddesignfotaruis-a-gurunzenfoxfordegreefreeboxost" +
- "rowiechitachinakagawatchandclockazimierz-dolnyfreemasonryfreibur" +
- "gfreightcmwildlifedjejuegoshikiminokamoenairlinedre-eikerfreseni" +
- "uscountryestateofdelawaredumbrellanbibaidarfribourgfriuli-v-giul" +
- "iafriuli-ve-giuliafriuli-vegiuliafriuli-venezia-giuliafriuli-ven" +
- "eziagiuliafriuli-vgiuliafriuliv-giuliafriulive-giuliafriulivegiu" +
- "liafriulivenezia-giuliafriuliveneziagiuliafriulivgiuliafrlfrogan" +
- "servicesettsurgeonshalloffamemergencyberlevagangaviikanonjis-a-h" +
- "ard-workerfrognfrolandfrom-akrehamnfrom-alfrom-arfrom-azpartis-a" +
- "-hunterfrom-capebretonamiasakuchinotsuchiurakawarszawashingtondc" +
- "lkhmelnitskiyamasfjordenfrom-collectionfrom-ctransportransurlfro" +
- "m-dchitosetogitsuldalucernefrom-dell-ogliastrakhanawafrom-flande" +
- "rsevastopolefrom-gafrom-higashiagatsumagoirminamiiselectrapaniim" +
- "imatakatoris-a-knightpointtokamachippubetsubetsugaruslivinghisto" +
- "ryfrom-iafrom-idfrom-ilfrom-incheonfrom-ksevenassisicilyfrom-kyo" +
- "wariasahikawafrom-lancashireggio-calabriafrom-manxn--1qqw23afrom" +
- "-mdfrom-meguromskoguchikuzenfrom-microsoftbankhmelnytskyivallee-" +
- "aosteroyfrom-mnfrom-mochizukirovogradoyfrom-msewilliamhillfrom-m" +
- "tnfrom-nchloefrom-ndfrom-nefrom-nhktravelchannelfrom-njcpartners" +
- "franziskanerdpolicefrom-nminamiizukamitondabayashiogamagoriziafr" +
- "om-nvalleeaosteigenfrom-nyfrom-ohkurafrom-oketohmaorivnefrom-orf" +
- "rom-paderbornfrom-pratohnoshoooshikamaishimofusartshangrilangeva" +
- "grarboretumbriafrom-ris-a-landscaperugiafrom-schoenbrunnfrom-sdf" +
- "rom-tnfrom-txn--2m4a15efrom-utazuerichardlillehammerfest-mon-blo" +
- "gueurovisionfrom-vaksdalfrom-vtravelersinsurancefrom-wafrom-wiel" +
- "unnerfrom-wvanylvenicefrom-wyfrosinonefrostalbansharis-a-lawyerf" +
- "royahabadajozoraholtalenvironmentalconservationfstavropolitienda" +
- "fujiiderafujikawaguchikonefujiminohtawaramotoineppubolognakaniik" +
- "awatanagurafujinomiyadafujiokayamapartsharpartyfujisatoshonairpo" +
- "rtland-4-salernogatagajobojis-a-liberalfujisawafujishiroishidaka" +
- "biratoridellogliastraderfujitsurugashimamateramodalenfujixeroxn-" +
- "-30rr7yfujiyoshidafukayabeardubaiduckdnshomebuiltrdfukuchiyamada" +
- "fukudominichocolatemasekazofukuis-a-libertarianfukumitsubishigak" +
- "iryuohadanoshiroomurafukuokazakisarazurewebsiteshikagamiishibuka" +
- "wafukuroishikarikaturindalfukusakishiwadafukuyamagatakahashimama" +
- "kisofukushimarburgfunabashiriuchinadafunagatakahatakaishimoichin" +
- "osekigaharafunahashikamiamakusatsumasendaisennangonohejis-a-linu" +
- "x-useranishiaritabashikaoizumizakitchenfundaciofuoiskujukuriyama" +
- "rcheapasadenaklodzkodairafuosskoczowinbaltimore-og-romsdalimited" +
- "iscoveryonaguniversityoriikashibatakashimarylhurstjohnaval-d-aos" +
- "ta-valleyukibestadishakotankashiharaukraanghkepnord-frontierepai" +
- "rbusantiquest-a-la-maisondre-landebusinessebyklefrakkestadds3-ap" +
- "-southeast-2furnitureggio-emilia-romagnakanojohanamakinoharafuru" +
- "biraquarellebesbyglandfurudonostiafurukawairtelecityeatshawaiiji" +
- "marugame-hostingfusodegaurafussaintlouis-a-anarchistoireggiocala" +
- "briafutabayamaguchinomigawafutboldlygoingnowhere-for-moregontrai" +
- "lroadfuttsurugiminamimakis-a-llamarylandfuturemailingfvgfyis-a-m" +
- "usicianfylkesbiblackfridayfyresdalhannanmokuizumodernhannovarese" +
- "rveblogspotrentino-a-adigehanyuzenhapmirhareidsbergenharstadharv" +
- "estcelebrationhasamarahasaminami-alpssells-itrentino-aadigehashb" +
- "anghasudahasura-appassenger-associationhasviklabudhabikinokawaba" +
- "rthaebaruminamiminowahatogayahoohatoyamazakitahiroshimarriottren" +
- "tino-alto-adigehatsukaichikaiseis-a-painteractivegarsheis-a-pats" +
- "fanhattfjelldalhayashimamotobuildinghazuminobusellsyourhomeipavi" +
- "ancargodaddyndns-at-homednshimonosekikawahboehringerikehelsinkit" +
- "akamiizumisanofidelitysvardollshimosuwalkis-a-personaltrainerhem" +
- "bygdsforbundhemneshimotsukehemsedalhepforgeherokussldheroyhgtvsh" +
- "imotsumahigashichichibungotakadatinghigashihiroshimanehigashiizu" +
- "mozakitakatakanezawahigashikagawahigashikagurasoedahigashikawaki" +
- "taaikitakyushuaiahigashikurumeiwamarshallstatebankmpspbamblebtim" +
- "netz-2higashimatsushimarinehigashimatsuyamakitaakitadaitoigawahi" +
- "gashimurayamalatvuopmidoris-a-photographerokuappfizerhigashinaru" +
- "sembokukitamidsundhigashinehigashiomihachimanchesterhigashiosaka" +
- "sayamamotorcycleshinichinanhigashishirakawamatakaokamikoaniikapp" +
- "ugliahigashisumiyoshikawaminamiaikitamotosumitakaginankokubunjis" +
- "-a-playerhigashitsunotogawahigashiurausukitanakagusukumoduminami" +
- "ogunicomcastresistancehigashiyamatokoriyamanakakogawahigashiyodo" +
- "gawahigashiyoshinogaris-a-republicancerresearchaeologicalifornia" +
- "hiraizumisatohobby-sitehirakatashinagawahiranairtraffichofunator" +
- "ientexpressatxn--1ck2e1balsanagochihayaakasakawaharavennagasakik" +
- "onaikawachinaganoharamcoalaheadjudaicaaarborteaches-yogasawaraci" +
- "ngroks-theatreemersongdalenviknakamuratakahamannortonsbergladelm" +
- "enhorstackspacekitagataiwanairguardigitalimanowarudaugustowadaeg" +
- "ubs3-ap-southeast-1hirarahiratsukagawahirayaitakarazukamiminersh" +
- "injournalismailillesandefjordhistorichouseshinjukumanohitachiomi" +
- "yaginowaniihamatamakawajimaritimodellinghitachiotagooglecodespot" +
- "rentino-altoadigehitoyoshimifunehitradinghjartdalhjelmelandholec" +
- "kobierzyceholidayhomelinuxn--32vp30hagakhanamigawahomesecurityma" +
- "ceratakasagoperaunitextileitungsenhomesecuritypccwindmillhomesen" +
- "seminehomeunixn--3bst00minamisanrikubetsupplyhondahoneywellbeing" +
- "zonehongorgehonjyoitakasakitashiobarahornindalhorseoulminamitane" +
- "hortendofinternetrentino-s-tirollagrigentomologyhoteleshinkamigo" +
- "toyohashimototalhotmailhoyangerhoylandetroitskokonoehumanitieshi" +
- "nshinotsurgeryhurdalhurumajis-a-rockstarachowicehyllestadhyogori" +
- "s-a-socialistmeindianapolis-a-bloggerhyugawarahyundaiwafunehzcho" +
- "nanbugattipschlesischesaudajgorajlchoshibuyachiyodavvesiidazaifu" +
- "daigodoesntexistanbullensvanguardyndns-wikindleikangerjlljmpharm" +
- "acienshiojirishirifujiedajnjelenia-gorajoyentrentino-sued-tirolj" +
- "oyokaichibahcavuotnagaraumalselvendrelljpmorganjpnchoyodobashich" +
- "ikashukujitawarajprshioyamemorialjuniperjurkristiansundkrodshera" +
- "dkrokstadelvaldaostarnbergkryminamiyamashirokawanabelgorodeokuma" +
- "torinokumejimassa-carrara-massacarraramassabunkyonanaoshimageand" +
- "soundandvisionkumenanyokkaichirurgiens-dentistes-en-francekunisa" +
- "kis-an-artistcgroupgfoggiakunitachiarailwaykunitomigusukumamotoy" +
- "amasoykunneppulawykunstsammlungkunstunddesignkuokgrouphdkureisen" +
- "kurgankurobelaudibleborkdalkurogimilitarykuroisoftwarendalenugku" +
- "romatsunais-an-engineeringkurotakikawasakis-an-entertainerkursko" +
- "mmunalforbundkushirogawakustanais-bykusupplieshiranukaniepcekutc" +
- "hanelkutnokuzbassnillfjordkuzumakis-certifiedogawarabikomaezakir" +
- "unorthwesternmutualkvafjordkvalsundkvamfamberkeleykvanangenkvine" +
- "sdalkvinnheradkviteseidskogkvitsoykwpspjelkavikommunemitourismol" +
- "anciamitoyoakemiuramiyazumiyotamanomjondalenmlbfanmonmouthagebos" +
- "tadmonstermonticellombardiamondshiraois-into-carshintomikasahara" +
- "montrealestatefarmequipmentrentino-suedtirolmonza-brianzaporizhz" +
- "hiamonza-e-della-brianzapposhiraokanmakiyokawaramonzabrianzaptok" +
- "yotangotpantheonsitemonzaebrianzaramonzaedellabrianzamoparachuti" +
- "ngmordoviajessheiminanomoriyamatsunomoriyoshiokamitsuemormoneymo" +
- "royamatsusakahoginozawaonsenmortgagemoscowindowshiratakahagivest" +
- "bytomaritimekeepingmoseushistorymosjoenmoskeneshishikuis-into-ca" +
- "rtoonshinyoshitomiokaneyamaxunusualpersonmosshisognemosvikomorot" +
- "sukamisunagawamoviemovistargardmtpchristmasakikugawatchesauherad" +
- "yndns-workisboringrossetouchijiwadeloittevadsoccertificationissh" +
- "ingugemtranakatsugawamuenstermugithubcloudusercontentrentinoa-ad" +
- "igemuikamogawamukochikushinonsenergymulhouservebeermunakatanemun" +
- "cieszynmuosattemuphiladelphiaareadmyblogsitemurmanskomvuxn--3ds4" +
- "43gmurotorcraftrentinoaadigemusashimurayamatsushigemusashinohara" +
- "museetrentinoalto-adigemuseumverenigingmutsuzawamutuellevangermy" +
- "dissentrentinoaltoadigemydrobofagemydshisuifuelmyeffectrentinos-" +
- "tirolmyfritzwinnershitaramamyftphilatelymykolaivarggatrentinosti" +
- "rolmymediapchromedicaltanissettaishinomakimobetsuliguriamyokoham" +
- "amatsudamypepsonyoursidedyn-o-saurecipesaro-urbino-pesarourbinop" +
- "esaromamurogawawioshizukuishimogosenmypetshizuokannamiharumyphot" +
- "oshibahccavuotnagareyamalvikongsbergmypsxn--3e0b707emysecurityca" +
- "merakermyshopblockshoujis-into-gamessinashikiwakunigamihamadamyt" +
- "is-a-bookkeepermincommbankomonomyvnchryslerpictetrentinosud-tiro" +
- "lpictureshowtimeteorapphoenixn--3oq18vl8pn36apiemontepilotshrira" +
- "mlidlugolekagaminogiftsienaplesigdalpimientaketomisatomskongsvin" +
- "gerpinkoninjamisonpioneerpippuphonefosshowapiszpittsburghofastly" +
- "piwatepizzapkonskowolayangroupharmacyshirahamatonbetsurgutsiracu" +
- "saitoshimaplanetariuminnesotaketakatsukis-foundationplantationpl" +
- "antsilkonsulatrobeepilepsydneyplatformintelligenceplaystationpla" +
- "zaplchungbukazunoplombardyndns-blogdnsimbirskonyvelolplumbingopm" +
- "npodzonepohlpoivronpokerpokrovskooris-a-techietis-a-soxfanpolkow" +
- "icepoltavalle-aostarostwodzislawitdkopervikomforbananarepublicar" +
- "toonartdecoffeedbackplaneappalacemreviewskrakoweddinglassassinat" +
- "ionalheritagematsubarakawagoeu-1pomorzeszowithgoogleapisa-hockey" +
- "nutrentinosudtirolpordenonepornporsangerporsanguideltajimicrolig" +
- "htingporsgrunnanpoznanpraxis-a-bruinsfanprdpreservationpresidiop" +
- "rgmrprimelhusgardenprincipeprivatizehealthinsuranceprochowicepro" +
- "ductionsimple-urlprofauskedsmokorsetagayasells-for-ulsandoyprogr" +
- "essivegasiaprojectrentinosued-tirolpromombetsurfbsbxn--1lqs03npr" +
- "opertyprotectionprotonetrentinosuedtirolprudentialpruszkowithyou" +
- "tubeneventoeidsvollprzeworskogptplusterptzpvtrentoyonakagyokutoy" +
- "akokamishihoronobeokaminoyamatsuris-leetrentino-stirolpwchungnam" +
- "dalseidfjordynnsavannahgapzqldqponqslgbtrevisohughesirdalquicksy" +
- "teslingqvchurchaseljeffersoniyodogawastoragestordalstorenburgsto" +
- "rfjordstpetersburgstreamsterdamnserverbaniastudiostudyndns-homef" +
- "tpaccessnoasakakinokiastuff-4-salestufftoread-booksnesnzstuttgar" +
- "trogstadsurreysusakis-not-certifieducatorahimeshimakanegasakinko" +
- "bayashikshacknethnologysusonosuzakanrasuzukanumazurysuzukis-save" +
- "dunetbankolobrzegersundsvalbardudinkakudamatsuesveiosvelvikoseis" +
- "-a-therapistoiasvizzeraswedenswidnicarrierswiebodzindianmarketin" +
- "gswiftcoveronaritakurashikis-slickomaganeswinoujscienceandhistor" +
- "yswisshikis-uberleetrentino-sud-tirolturystykarasjohkamiokaminok" +
- "awanishiaizubangetuscanytushuissier-justicetuvalle-daostatichuva" +
- "shiatuxfamilyversicherungvestfoldvestnesolutionslupskoryolasitev" +
- "estre-slidreamhostersomavestre-totennishiawakuravestvagoyvevelst" +
- "advibo-valentiavibovalentiavideovillaskoyabearalvahkijobserverda" +
- "lvdalcesomnarashinovinnicartiervinnytsiavipsinaapphotographysiov" +
- "irginiavirtualvirtueeldomeindustriesteambulancevirtuelvisakegawa" +
- "vistaprinternationalfirearmsooviterboltromsakatakinouevivoldavla" +
- "dikavkazanvladimirvladivostokaizukarasuyamazoevlogoipiagetmyiphi" +
- "lipsyvolkenkundenvolkswagentsopotritonvologdanskoshunantokonameg" +
- "atakasugais-an-accountantshinshirovolvolgogradvolyngdalvoronezhy" +
- "tomyrvossevangenvotevotingvotoyonezawavrnworldworse-thanggliding" +
- "wowiwatsukiyonowruzhgorodoywritesthisblogsytewroclawloclawekostr" +
- "omahachijorpelandwtcirclegnicafederationwtfbx-oslodingenwuozuwww" +
- "mflabsor-odalwzmiuwajimaxn--4gq48lf9jeonnamerikawauexn--4it168dx" +
- "n--4it797kotohiradomainsurehabmerxn--4pvxsor-varangerxn--54b7fta" +
- "0ccitichernigovernmentoyookanzakiyosatokigawaxn--55qw42gxn--55qx" +
- "5dxn--5js045dxn--5rtp49civilaviationxn--5rtq34kotouraxn--5su34j9" +
- "36bgsgxn--5tzm5gxn--6btw5axn--6frz82gxn--6orx2rxn--6qq986b3xlxn-" +
- "-7t0a264civilisationxn--80adxhksorfoldxn--80ao21axn--80aqecdr1ax" +
- "n--80asehdbarclaycardsakuraibigawaurskog-holandroverhalla-spezia" +
- "grocerybnikahokutobishimaizurubtsovskiervaapsteiermarkariyakumol" +
- "dev-myqnapcloudcontrolappagefrontappagespeedmobilizerobiraeropor" +
- "talabamagasakishimabarackmaze12xn--80aswgxn--80audnedalnxn--8ltr" +
- "62kouhokutamakis-an-actorxn--8pvr4uxn--8y0a063axn--90a3academyac" +
- "tivedirectoryazannakadomari-elasticbeanstalkounosunndalxn--90ais" +
- "hobaraomoriguchiharahkkeravjudygarlandxn--90azhaibarakitahatakan" +
- "abeautydalxn--9dbhblg6dietcimmobilienxn--9dbq2axn--9et52uxn--9kr" +
- "t00axn--andy-iraxn--aroport-byanagawaxn--asky-iraxn--aurskog-hla" +
- "nd-jnbarclaysakyotanabellunordkappgafanpachigasakidsmynasushioba" +
- "ragusaarlandiskstationavigationavuotnakayamatsuuraustevollavagis" +
- "kebinagisochildrensgardenaturalhistorymuseumcenterepbodyndns-fre" +
- "ebox-oskolegokasells-for-less3-eu-central-1xn--avery-yuasakuhokk" +
- "aidontexisteingeekouyamashikis-an-actresshintokushimaxn--b-5gaxn" +
- "--b4w605ferdxn--bck1b9a5dre4civilizationxn--bdddj-mrabdxn--beara" +
- "lvhki-y4axn--berlevg-jxaxn--bhcavuotna-s4axn--bhccavuotna-k7axn-" +
- "-bidr-5nachikatsuuraxn--bievt-0qa2xn--bjarky-fyanaizuxn--bjddar-" +
- "ptamayufuettertdasnetzxn--blt-elabourxn--bmlo-graingerxn--bod-2n" +
- "aroyxn--brnny-wuaccident-investigationjukudoyamagadancebetsukuba" +
- "bia-goracleaningatlantabusebastopologyeonggiehtavuoatnadexeterim" +
- "o-i-ranagahamaroygardendoftheinternetflixilovecollegefantasyleag" +
- "uernseyxn--brnnysund-m8accident-preventionlineat-urlxn--brum-voa" +
- "gatromsojavald-aostaplesokanoyakagexn--btsfjord-9zaxn--c1avgxn--" +
- "c2br7gxn--c3s14misasaguris-into-animelbournexn--cck2b3barefootba" +
- "llooningliwiceventsalangenayoroddaustinnaturalsciencesnaturelles" +
- "3-eu-west-1xn--cg4bkis-very-badaddjamalborkangerxn--ciqpnxn--clc" +
- "hc0ea0b2g2a9gcdn77-sslattumisawaxn--comunicaes-v6a2oxn--correios" +
- "-e-telecomunicaes-ghc29axn--czr694bargainstitutelemarkashiwaraus" +
- "traliaisondriodejaneirochestereportarantours3-external-1xn--czrs" +
- "0trusteexn--czru2dxn--czrw28barreauctionflfanfshostrodawaraustrh" +
- "eimatunduhrennesoyokotebinorilskarlsoyokozebizenakamagayachts3-e" +
- "xternal-2xn--d1acj3barrel-of-knowledgeologyukuhashimojibmditchyo" +
- "uripalanakhodkanagawauthordalandroidgcahcesuolocalhistoryggeelvi" +
- "nckarmoyomitanobninskarpaczeladz-1xn--d1alfaromeoxn--d1atrvbarce" +
- "lonagasukeu-2xn--d5qv7z876civilwarmanagementoyosatoyokawaxn--dav" +
- "venjrga-y4axn--djrs72d6uyxn--djty4kouzushimashikokuchuoxn--dnna-" +
- "grajewolterskluwerxn--drbak-wuaxn--dyry-iraxn--e1a4claimsaves-th" +
- "e-whalessandria-trani-barletta-andriatranibarlettaandriaxn--eckv" +
- "dtc9dxn--efvn9sorreisahayakawakamiichikawamisatottoris-lostre-to" +
- "teneis-a-studentalxn--efvy88hair-surveillancexn--ehqz56nxn--elqq" +
- "16hakatanotaireshimokawaxn--estv75gxn--eveni-0qa01gaxn--f6qx53ax" +
- "n--fct429kozagawaxn--fhbeiarnxn--finny-yuaxn--fiq228c5hsortlandx" +
- "n--fiq64barrell-of-knowledgeometre-experts-comptablesalondonetsk" +
- "ashiwazakiyosemiteverbankasukabedzin-the-bandaioiraseeklogesuran" +
- "certmgretachikawakkanaibetsubamericanfamilydscloudcontrolledekaf" +
- "jordivtasvuodnagatorogersaltdalimoliserniautomotivecodynaliascol" +
- "i-picenoipirangamvikaruizawamusementaobaokinawashirosatochiokino" +
- "shimakeupowiathletajimabariakembuchikumagayagawakuyabukihokumako" +
- "gengerdalipayekaterinburgjerdrumckinseyokosukareliance164xn--fiq" +
- "s8sorumisakis-gonexn--fiqz9southcarolinazawaxn--fjord-lraxn--fjq" +
- "720axn--fl-ziaxn--flor-jraxn--flw351exn--fpcrj9c3dxn--frde-grand" +
- "rapidsouthwestfalenxn--frna-woaraisaijosoyrovigorlicexn--frya-hr" +
- "axn--fzc2c9e2clickchristiansburgroundhandlingroznyxn--fzys8d69uv" +
- "gmailxn--g2xx48clinichernihivanovosibirskautokeinoxn--gckr3f0fbx" +
- "ostrolekaluganskharkivgucciprianiigataitogliattirescrappingushik" +
- "amifuranosegawaxn--gecrj9cliniquenoharaxn--ggaviika-8ya47hakodat" +
- "exn--gildeskl-g0axn--givuotna-8yandexn--3pxu8kosugexn--gjvik-wua" +
- "xn--gk3at1exn--gls-elacaixaxn--gmq050is-very-evillagexn--gmqw5ax" +
- "n--h-2failxn--h1aeghakonexn--h2brj9clintonoshoesavonamsskoganeis" +
- "-a-doctorayxn--hbmer-xqaxn--hcesuolo-7ya35bashkiriautoscanadaeje" +
- "onbukarumaifarmerseinextdirectargets-itargivingjesdalavangenatur" +
- "bruksgymnaturhistorisches3-fips-us-gov-west-1xn--hery-iraxn--hge" +
- "bostad-g3axn--hmmrfeasta-s4acctrysiljan-mayenxn--hnefoss-q1axn--" +
- "hobl-iraxn--holtlen-hxaxn--hpmir-xqaxn--hxt814exn--hyanger-q1axn" +
- "--hylandet-54axn--i1b6b1a6a2exn--imr513nxn--indery-fyaotsurnadal" +
- "xn--io0a7is-very-goodhandsonxn--j1aefermobilyxn--j1amhakubankhva" +
- "olbia-tempio-olbiatempioolbialystokkemerovodkagoshimalopolskanla" +
- "ndxn--j6w193gxn--jlq61u9w7basilicataniaveroykeniwaizumiotsukumiy" +
- "amazonawsabaerobaticketsaritsynologyeongnamegawakeisenbahnatuurw" +
- "etenschappenaumburgjovikasaokamisatokashikiwienaustdalazioceanog" +
- "raphics3-sa-east-1xn--jlster-byaroslavlaanderenxn--jrpeland-54ax" +
- "n--jvr189misconfusedxn--k7yn95exn--karmy-yuaxn--kbrq7oxn--kcrx77" +
- "d1x4axn--kfjord-iuaxn--klbu-woaxn--klt787dxn--kltp7dxn--kltx9axn" +
- "--klty5xn--42c2d9axn--koluokta-7ya57hakuis-a-nascarfanxn--kprw13" +
- "dxn--kpry57dxn--kpu716ferraraxn--kput3is-very-nicexn--krager-gya" +
- "sakaiminatoyonoxn--kranghke-b0axn--krdsherad-m8axn--krehamn-dxax" +
- "n--krjohka-hwab49jetztrentino-sudtirolxn--ksnes-uuaxn--kvfjord-n" +
- "xaxn--kvitsy-fyasugis-very-sweetpepperxn--kvnangen-k0axn--l-1fai" +
- "rwindsowaxn--l1accentureklamborghiniizaxn--laheadju-7yasuokarate" +
- "xn--langevg-jxaxn--lcvr32dxn--ldingen-q1axn--leagaviika-52basket" +
- "ballfinanzgoravocatanzarowebhopocznoceanographiquehimeji234xn--l" +
- "esund-huaxn--lgbbat1ad8jevnakershuscultureggioemiliaromagnakasat" +
- "sunais-a-teacherkassymantechnologyxn--lgrd-poacoachampionshiphop" +
- "tobamagazinebraskaunjargallupinbatodayurihonjournalisteinkjerusa" +
- "lembroideryusuharavoues3-us-gov-west-1xn--lhppi-xqaxn--linds-pra" +
- "mericanartulansokndalxn--lns-qlanxesspreadbettingxn--loabt-0qaxn" +
- "--lrdal-sraxn--lrenskog-54axn--lt-liaclothingrpanasonichernivtsi" +
- "ciliaxn--lten-granexn--lury-iraxn--mely-iraxn--merker-kuaxn--mgb" +
- "2ddespydebergxn--mgb9awbferrarittogoldpoint2thisamitsukexn--mgba" +
- "3a3ejtunesolarssonxn--mgba3a4f16axn--mgba3a4franamizuholdingsmil" +
- "eksvikozakis-an-anarchistoricalsocietyumenxn--mgba7c0bbn0axn--mg" +
- "baakc7dvferreroticanonoichinomiyakexn--mgbaam7a8hakusandiegoodye" +
- "arthadselfipassagenshellaspeziaxn--mgbab2bdxn--mgbai9a5eva00bats" +
- "fjordivttasvuotnaharimaniwakuratexascolipicenord-aurdalpha-myqna" +
- "pcloudappspotagerhcloudfunctionsalvadordalibabaikaliszczytnord-o" +
- "dalindasdaburyatiaarpaleomutashinaiinetarnobrzegyptianhlfanhsalz" +
- "burglobalashovhachinohedmarkasumigaurawa-mazowszexboxenapponazur" +
- "e-mobilevje-og-hornnesamegawaxasnesoddenmarkhangelskjervoyagemol" +
- "ogicallyngenglanddnskingjerstadotsuruokamchatkameokameyamashinat" +
- "sukigatakamatsukawaetnagaivuotnagaokakyotambabydgoszczecinemagen" +
- "tositelekommunikationthewifiat-band-campaniamallamaintenanceobih" +
- "irosakikamijimattelefonicarbonia-iglesias-carboniaiglesiascarbon" +
- "iabruzzoologyeongbuk-uralsk12xn--mgbai9azgqp6jewelryxn--mgbayh7g" +
- "paduaxn--mgbb9fbpobanazawaxn--mgbbh1a71exn--mgbc0a9azcgxn--mgbca" +
- "7dzdoxn--mgberp4a5d4a87gxn--mgberp4a5d4arxn--mgbi4ecexposedxn--m" +
- "gbpl2fhskpnxn--mgbqly7c0a67fbcloudnsdojoetsuwanouchikujogaszkola" +
- "hppiacenzakopanerairforcexn--mgbqly7cvafredrikstadtverranzanxn--" +
- "mgbt3dhdxn--mgbtf8flatangerxn--mgbtx2bauhausposts-and-telecommun" +
- "icationsnasadodgeorgeorgiaxn--mgbx4cd0abbottunkosherbrookegawaxn" +
- "--mix082fetsundxn--mix891fgxn--1lqs71dxn--mjndalen-64axn--mk0axi" +
- "nfinitis-with-thebandoomdnsfor-better-thandaxn--mk1bu44cnsaxoxn-" +
- "-mkru45isleofmandalxn--mlatvuopmi-s4axn--mli-tlapyatigorskppspie" +
- "gelxn--mlselv-iuaxn--moreke-juaxn--mori-qsakuragawaxn--mosjen-ey" +
- "atominamiawajikissmarterthanyoustkarasjokomakiyosumycdn77-secure" +
- "chtrainingxn--mot-tlaquilancasterxn--mre-og-romsdal-qqbbcasadela" +
- "monedatsunanjoburglobodoes-itvedestrandiyusuisserveexchangexn--m" +
- "sy-ula0haldenxn--mtta-vrjjat-k7afamilycompanycntoyotaris-a-finan" +
- "cialadvisor-aurdalukowhoswhokksundynv6xn--muost-0qaxn--mxtq1mish" +
- "imatsumaebashimodatexn--ngbc5azdxn--ngbe9e0axn--ngbrxn--45brj9ci" +
- "rcus-2xn--nit225krasnodarxn--nmesjevuemie-tcbajddarchaeologyxn--" +
- "nnx388axn--nodexn--nqv7fs00emaxn--nry-yla5gxn--ntso0iqx3axn--nts" +
- "q17gxn--nttery-byaeservecounterstrikexn--nvuotna-hwaxn--nyqy26ax" +
- "n--o1achattanooganorfolkebiblegallocus-1xn--o3cw4halsaitamatsuku" +
- "ris-a-nurservebbshimokitayamaxn--od0algxn--od0aq3bbtarumizusawax" +
- "n--ogbpf8flekkefjordxn--oppegrd-ixaxn--ostery-fyatsukaratsuginam" +
- "ikatagamihoboleslawiecolonialwilliamsburgruexn--osyro-wuaxn--p1a" +
- "cfhvalerxn--p1aiwchoseirouterxn--pbt977coloradoplateaudioxn--pgb" +
- "s0dhlxn--porsgu-sta26fidonnakaiwamizawaxn--pssu33lxn--pssy2uxn--" +
- "q9jyb4columbusheyxn--qcka1pmcdonaldsrlxn--qqqt11missilelxn--qxam" +
- "urskjakdnepropetrovskiptveterinairealtorlandxn--rady-iraxn--rdal" +
- "-poaxn--rde-ularvikrasnoyarskomitamamuraxn--rdy-0nabarixn--renne" +
- "sy-v1axn--rhkkervju-01aflakstadaokagakibichuoxn--rholt-mragowood" +
- "sidexn--rhqv96gxn--rht27zxn--rht3dxn--rht61exn--risa-5narusawaxn" +
- "--risr-iraxn--rland-uuaxn--rlingen-mxaxn--rmskog-byatsushiroxn--" +
- "rny31hammarfeastafricapetownnews-stagingxn--rovu88bbvacationsupd" +
- "atelevisionikiitatebayashijonawatexn--rros-granvindafjordxn--rsk" +
- "og-uuaxn--rst-0narutomobellevuelosangelesjaguarchitecturealtychy" +
- "attorneyagawalbrzycharternopilawalesundxn--rsta-francaiseharaxn-" +
- "-ryken-vuaxn--ryrvik-byawaraxn--s-1faitheguardianxn--s9brj9commu" +
- "nitysfjordyroyrvikinguitarsbschokoladenxn--sandnessjen-ogbizhevs" +
- "kredirectmeldalxn--sandy-yuaxn--seral-lraxn--ses554gxn--sgne-gra" +
- "tangenxn--skierv-utazaskvolloabathsbcomobaraxn--skjervy-v1axn--s" +
- "kjk-soaxn--sknit-yqaxn--sknland-fxaxn--slat-5narviikananporovnox" +
- "n--slt-elabbvieeexn--smla-hraxn--smna-gratis-a-bulls-fanxn--snas" +
- "e-nraxn--sndre-land-0cbremangerxn--snes-poaxn--snsa-roaxn--sr-au" +
- "rdal-l8axn--sr-fron-q1axn--sr-odal-q1axn--sr-varanger-ggbentleyu" +
- "uconnectatamotorsamnangerxn--srfold-byawatahamaxn--srreisa-q1axn" +
- "--srum-grazxn--stfold-9xaxn--stjrdal-s1axn--stjrdalshalsen-sqbep" +
- "publishproxyzgorzeleccolognewportlligatewayuzawaxn--stre-toten-z" +
- "cbsrtroandinosaurlandesmolenskosaigawaxn--t60b56axn--tckweatherc" +
- "hannelxn--tiq49xqyjewishartgalleryxn--tjme-hraxn--tn0agrinet-fre" +
- "aksrvaroyxn--tnsberg-q1axn--tor131oxn--trany-yuaxn--trgstad-r1ax" +
- "n--trna-woaxn--troms-zuaxn--tysvr-vraxn--uc0atvdonskoshimizumaki" +
- "zunokunimilanoxn--uc0ay4axn--uist22hamurakamigoriginshimonitayan" +
- "agitlaborxn--uisz3gxn--unjrga-rtambovenneslaskerrylogisticsologn" +
- "exn--unup4yxn--uuwu58axn--vads-jraxn--vard-jraxn--vegrshei-c0axn" +
- "--vermgensberater-ctberndnpalermomasvuotnakatombetsupportatarsta" +
- "nikkoebenhavnikolaevennodessaikiraxn--vermgensberatung-pwbeskidy" +
- "nathomedepotenzachpomorskienikonantanangerxn--vestvgy-ixa6oxn--v" +
- "g-yiabcn-north-1xn--vgan-qoaxn--vgsy-qoa0jfkomatsushimashikexn--" +
- "vgu402comparemarkerryhotelscholarshipschooluroyxn--vhquversaille" +
- "solundbeckosakaerodromegalsacechirealminamiuonumasudaxn--vler-qo" +
- "axn--vre-eiker-k8axn--vrggt-xqadxn--vry-yla5gxn--vuq861bestbuysh" +
- "ousesamsclubindalindesnesamsunglogowegroweibolzanordre-landrange" +
- "dalinkasuyakutiaxn--w4r85el8fhu5dnraxn--w4rs40lxn--wcvs22dxn--wg" +
- "bh1compute-1xn--wgbl6axn--xhq521betainaboxfusejnynysagaeroclubme" +
- "decincinnationwidealerxn--xkc2al3hye2axn--xkc2dl3a5ee0hangoutsys" +
- "temscloudfrontdoorxn--y9a3aquariumisugitokuyamatsumotofukexn--ye" +
- "r-znarvikristiansandcatshirakoenigxn--yfro4i67oxn--ygarden-p1axn" +
- "--ygbi2ammxn--45q11citadeliveryokamikawanehonbetsurutaharaxn--ys" +
- "tre-slidre-ujbieigersundrivelandrobaknoluoktaikicks-assedicaseih" +
- "ichisobetsuitaipeiheijiiyamanobeauxartsandcraftsandvikcoromantov" +
- "alle-d-aostathellexusdecorativeartsanfranciscofreakunemurorangei" +
- "seiyoichiropracticasertairaxn--zbx025dxn--zf0ao64axn--zf0avxn--4" +
- "gbriminingxn--zfr164bielawallonieruchomoscienceandindustryninohe" +
- "kinannestadrudmurtiaxperiaxz"
+const text = "bikedagestangeorgeorgiaxagrocerybnikahokutobishimaizuruhreportar" +
+ "nobrzegyptianaturalhistorymuseumcentereviewskrakoweddinggfarmers" +
+ "einexus-2bilbaogakievenesalangenikiiyamanouchikuhokuryugasakitau" +
+ "rayasudabillustrationikkoebenhavnikolaevennodessagamiharabiomuta" +
+ "shinainfinitintuitattoolsztynsettlersalondonetskarpaczeladzjcbre" +
+ "mangerbirdartcenterprisesakikuchikuseikarugapartmentsaltdalimoli" +
+ "serniabirkenesoddtangenovaravennagasukeverbankaruizawabirthplace" +
+ "vje-og-hornnesalvadordalibabajddarchaeologyusuisserveexchangebja" +
+ "rkoyuufcfanikonantanangerbjerkreimbalsanagochihayaakasakawaharau" +
+ "malopolskanlandds3-us-west-1bjugninohekinannestadrangedalindasda" +
+ "burblockbusternidray-dnsupdaterbloombergbauerninomiyakonojosoyro" +
+ "rosalzburgjovikarumaifarmsteadraydnsamegawabloxcmsamnangerblueda" +
+ "ncebmoattachmentsamsclubindalindesnesamsungladell-ogliastraderbm" +
+ "sandvikcoromantovalle-d-aostatic-accessanfranciscofreakunemurora" +
+ "ngeiseiyoichiropracticasinordre-landrivelandrobaknoluoktabuseekl" +
+ "ogesurancertmgretachikawakkanaibetsubamericanfamilydscloudcontro" +
+ "lledekafjordrudunsangoppdalivornobmweirbnpparibaselburglassassin" +
+ "ationalheritagematsubarakawagoebnrwfarsundupontariobonnirasakinu" +
+ "yamashinashikitchenishiazainvestmentsanjournalismailillesandefjo" +
+ "rdurbanamexhibitionishigobookingliwicebootsannanishiharaboschaef" +
+ "flerdalomzaporizhzhegurinzais-a-bulls-fanishiizunazukis-a-candid" +
+ "atebostikasaokamiminersannohelplfinancialorenskoglobalashovhachi" +
+ "nohedmarkashibatakasakiyokawarabostonakijinsekikogentinglobodoes" +
+ "-itvedestrandurhamburglogowhalingloppenzaogashimadachicagoboatsa" +
+ "nokashiharabotanicalgardenishikatakayamatta-varjjataxihuanishika" +
+ "tsuragithubusercontentgoryuzawabotanicgardenishikawazukamitondab" +
+ "ayashiogamagoriziabotanybouncemerckmsdnipropetrovskjakdnepropetr" +
+ "ovskiervaapsteiermarkashiwarabounty-fullensakerrypropertiesantab" +
+ "arbaraboutiquebecngmbhartiffanybozentsujiiebradescorporationishi" +
+ "merabrandywinevalleybrasiliabresciabrindisibenikebristoloslocalh" +
+ "istoryggeelvinckashiwazakiyosatokashikiyosemitebritishcolumbialo" +
+ "wiezachpomorskienishinomiyashironobroadcastlefrakkestadvrcambrid" +
+ "gestonextdirectjeldsundvrdnsantacruzsantafedextraspacekitagataji" +
+ "rittogoldpoint2thisamitsukebroadwaybroke-itjmaxxxboxenapponazure" +
+ "-mobilebrokerbronnoysundwgminakamichiharabrothermesaverdeatnurem" +
+ "bergmodellingmxfinitybrowsersafetymarketsanukis-a-catererbrumund" +
+ "dalotenkawabrunelasticbeanstalkasukabedzin-the-bandaikawachinaga" +
+ "noharamcoalaskanittedallasalleasinglest-mon-blogueurovisionthewi" +
+ "fiat-band-campaniabrusselsaotomemergencyberlevagangaviikanonjis-" +
+ "a-celticsfanishinoomotegobruxellesapodlasiellakasamatsudovre-eik" +
+ "erbryanskjervoyagebrynewhampshirebungoonordlandyndns-at-workingg" +
+ "roupalacebuskerudinewjerseybuzenishinoshimattelefonicarbonia-igl" +
+ "esias-carboniaiglesiascarboniabuzzlgrimstadyndns-blogdnsapporobw" +
+ "hoswhokksundyndns-freebox-ostrowiecateringebuilderschmidtre-gaul" +
+ "dalottebzhitomirumalselvendrellottokonamegatakasugais-a-chefashi" +
+ "onishiokoppegardyndns-homednsardegnamsskoganeis-a-conservativefs" +
+ "nillfjordyndns-ipaleocondoshichinohealth-carereformitakeharaconf" +
+ "erenceconstructionconsuladoesntexistanbullensvanguardyndns-wikin" +
+ "dlegokasells-for-lessaudaconsultanthropologyconsultingvolluxuryc" +
+ "ontactoyookanmakiwakunigamifunecontemporaryarteducationalchikugo" +
+ "doharuovatoyosatoyakokonoecontractorskenconventureshinodesashibe" +
+ "tsuikinderoycookingchannelblagdenesnaaseralingenkainanaejrietisa" +
+ "latinabenonichernihivanovodkagoshimalvikasumigaurawa-mazowszexjc" +
+ "palermomahachijorpelandyndns-mailouvreisenishitosashimizunaminam" +
+ "iashigaracoolkuszkoladbrokesauheradyndns-workisboringrpamperedch" +
+ "efastlylbaltimore-og-romsdalwaysdatabaseballangenoamishirasatoch" +
+ "igiessenebakkeshibechambagriculturennebudejjudygarlandigitalavan" +
+ "genavigationavuotnaklodzkodairamusementarumizusawabruzzoologyeon" +
+ "gbuk12cooperaunitemasekatsushikabeeldengeluidyndns1copenhagencyc" +
+ "lopedichernivtsiciliacorsicagliarightathomeftpanamacorvettenriku" +
+ "zentakataitogliattiresavannahgacosenzaganquannakadomaritimekeepi" +
+ "ngatlantaijis-a-financialadvisor-aurdaluzerncosidnsfor-better-th" +
+ "anawawildlifedjeffersoncostumedio-campidano-mediocampidanomedioc" +
+ "ouchpotatofriesaves-the-whalessandria-trani-barletta-andriatrani" +
+ "barlettaandriacouncilvivano-frankivskatsuyamasfjordencouponsavon" +
+ "aplesaxocoursesbschokoladencq-acranbrookuwanalyticscholarshipsch" +
+ "oolcreditcardynnschulezajskydivingruecreditunioncremonashorokana" +
+ "iecrewilliamhillcricketrzyncrimeastcoastaldefencecrotonewyorkshi" +
+ "recipesaro-urbino-pesarourbinopesaromasvuotnaharimamurogawacrown" +
+ "providercrsvpanasonichernovtsykkylvenetogakushimotoganewportllig" +
+ "atjxn--0trq7p7nnishiwakis-a-cpadoval-daostavalleycruiseschwarzgw" +
+ "angjuegoshikiminokamoenairtraffichiryukyuragifuchungbukasuyaltak" +
+ "ashimaseratis-a-cubicle-slavellinowtvalleaostatoilowiczest-le-pa" +
+ "trondheimmobilienissandnessjoenissayokoshibahikariwanumatakazaki" +
+ "s-a-democratkmaxxn--11b4c3dyndns-office-on-the-webcampobassociat" +
+ "esardiniacryptonomichigangwoncuisinellahppiacenzakopanerairguard" +
+ "ynv6culturalcentertainmentoyotaris-a-geekgalaxycuneocupcakecxn--" +
+ "1ctwolominamatakkokaminokawanishiaizubangecymrussiacyonabarulsan" +
+ "doycyouthdfcbankaufenfiguerestaurantoyotomiyazakis-a-greenfilate" +
+ "liafilminamiawajikis-a-guruslivinghistoryfinalfinancefineartscie" +
+ "ntistoragefinlandfinnoyfirebaseapparliamentoyotsukaidownloadfire" +
+ "nzefirestonefirmdaleirfjordfishingolffanscjohnsonfitjarqhachioji" +
+ "yahikobeatscotlandfitnessettlementoyourafjalerflesbergushikamifu" +
+ "ranoshiroomuraflickragerotikakamigaharaflightscrapper-siteflirfl" +
+ "ogintogurafloraflorencefloridavvesiidazaifudaigojomedizinhistori" +
+ "schescrappingxn--1lqs71dfloristanohatakahamaniwakuratexascolipic" +
+ "enord-aurdalipayflorogerserveftparmaflowerservegame-serversaille" +
+ "servehalflifestyleflynnhubambleclercartoonartdecoldwarmiamibugat" +
+ "tipschlesisches3-us-west-2fndfoodnetworkshoppingfor-ourfor-somee" +
+ "thnologyfor-theaterforexrothruherecreationforgotdnservehttparoch" +
+ "erkasyno-dservehumourforli-cesena-forlicesenaforlikescandynamic-" +
+ "dnserveirchitachinakagawatchandclockaszubyforsaleirvikazoforsand" +
+ "asuoloftoystre-slidrettozawafortmissoulair-traffic-controlleyfor" +
+ "tworthachirogatakahatakaishimogosenforuminamibosogndalfosneserve" +
+ "minecraftozsdev-myqnapcloudcontrolappspotagerfotaruis-a-hard-wor" +
+ "kerfoxfordedyn-ip24freeboxoservemp3utilitiesquarezzoologicalvink" +
+ "lein-addrammenuernbergdyniabogadocscbnl-o-g-i-nativeamericananti" +
+ "ques3-ap-northeast-1kappchizippodhaleangaviikadenadexeterepbodyn" +
+ "athomebuilt3l3p0rtargets-itargiving12000emmafanconagawakayamadri" +
+ "dvagsoyericssonyoursidealerimo-i-ranaamesjevuemielno-ip6freemaso" +
+ "nryfreiburgfreightcminamidaitomangotsukisosakitagawafreseniuscou" +
+ "ntryestateofdelawaredstonefribourgfriuli-v-giuliafriuli-ve-giuli" +
+ "afriuli-vegiuliafriuli-venezia-giuliafriuli-veneziagiuliafriuli-" +
+ "vgiuliafriuliv-giuliafriulive-giuliafriulivegiuliafriulivenezia-" +
+ "giuliafriuliveneziagiuliafriulivgiuliafrlfroganservep2parservepi" +
+ "cservequakefrognfrolandfrom-akrehamnfrom-alfrom-arfrom-azwinbana" +
+ "narepublicasadelamonedatsunanjoburgjerstadotsuruokakegawasnesodd" +
+ "enmarkhangelskiptveterinairealtychyattorneyagawalmartatamotors3-" +
+ "ap-south-1from-capebretonamiastapleservesarcasmatartanddesignfro" +
+ "m-collectionfrom-ctrani-andria-barletta-trani-andriafrom-dchitos" +
+ "etogitsuldalucaniafrom-defenseljordfrom-flanderservicesettsurgeo" +
+ "nshalloffamemorialfrom-gausdalfrom-higashiagatsumagoizumizakiraf" +
+ "rom-iafrom-idfrom-ilfrom-incheonfrom-ksevastopolefrom-kyowariasa" +
+ "hikawafrom-lajollamericanexpressexyfrom-mannortonsbergfrom-mdfro" +
+ "m-megurokunohealthcareersevenassisicilyfrom-midoris-a-hunterfrom" +
+ "-mnfrom-mochizukirkenesewindmillfrom-msfranziskanerdpolicefrom-m" +
+ "tnfrom-nchloefrom-ndfrom-nefrom-nhktraniandriabarlettatraniandri" +
+ "afrom-njelenia-gorafrom-nminamiechizenfrom-nvalled-aostavangerfr" +
+ "om-nyfrom-ohkurafrom-oketohmansionshangrilanciafrom-orfrom-pader" +
+ "bornfrom-pratohnoshoooshikamaishimodatextileitungsenfrom-ris-a-k" +
+ "nightpointtokaizukameokameyamatotakadafrom-schoenbrunnfrom-sdfro" +
+ "m-tnfrom-txn--1qqw23afrom-utazuerichardlillehammerfeste-ipartis-" +
+ "a-landscaperfrom-vaksdalfrom-vtranoyfrom-wafrom-wielunnerfrom-wv" +
+ "alledaostavernfrom-wyfrosinonefrostalowa-wolawafroyahababyglandf" +
+ "stcgroupartnersharis-a-lawyerfujiiderafujikawaguchikonefujiminoh" +
+ "tawaramotoineppubolognakanotoddenfujinomiyadafujiokayamanxn--2m4" +
+ "a15efujisatoshonairportland-4-salernoboribetsucksharpartshawaiij" +
+ "imarugame-hostrodawarafujisawafujishiroishidakabiratoridegreefuj" +
+ "itsurugashimamateramodalenfujixeroxn--30rr7yfujiyoshidafukayabea" +
+ "rdubaiduckdnshellaspeziafukuchiyamadafukudominichocolatelevision" +
+ "issedaluccapitalonewmexicoffeedbackplaneapplinzis-a-designerimar" +
+ "umorimachidafukuis-a-liberalfukumitsubishigakirovogradoyfukuokaz" +
+ "akiryuohadanotaireshimojis-a-libertarianfukuroishikarikaturindal" +
+ "fukusakisarazurewebsiteshikagamiishibukawafukuyamagatakaharustka" +
+ "noyakagefunabashiriuchinadafunagatakahashimamakishiwadafunahashi" +
+ "kamiamakusatsumasendaisennangonohejis-a-linux-useranishiaritabas" +
+ "hijonawatefundaciofuoiskujukuriyamaoris-a-llamarylandfuosskoczow" +
+ "indowshimokawafurnituredumbrellanbibaidarfurubiraquarelleborkang" +
+ "erfurudonostiaarpartyfurukawairtelecityeatshimokitayamafusodegau" +
+ "rafussaikisofukushimapasadenamsosnowiechofunatorientexpressarluc" +
+ "ernefutabayamaguchinomigawafutboldlygoingnowhere-for-moregontrai" +
+ "lroadfuttsurugimperiafuturehostingfuturemailingfvgfyis-a-musicia" +
+ "nfylkesbiblackfridayfyresdalhangglidinghangoutsystemscloudfrontd" +
+ "oorhannanmokuizumodenakasatsunais-a-painteractivegarsheis-a-pats" +
+ "fanhannotteroyhanyuzenhapmirhareidsbergenharstadharvestcelebrati" +
+ "onhasamarnardalhasaminami-alpssells-itransportransurlhashbanghas" +
+ "udahasura-appassenger-associationhasvikazunohatogayahoohatoyamaz" +
+ "akitahiroshimarriottrapaniimimatakatoris-a-personaltrainerhatsuk" +
+ "aichikaiseis-a-photographerokuappaviancargodaddynaliascoli-picen" +
+ "oipirangamvikddielddanuorrissagaeroclubmedecincinnationwidealsta" +
+ "haugesunderseaportsinfolldalabamagasakishimabarackmazehattfjelld" +
+ "alhayashimamotobungotakadapliernewhollandhazuminobusellsyourhome" +
+ "goodshimotsumahboehringerikehelsinkitakamiizumisanofidelitysvard" +
+ "ollshinichinanhembygdsforbundhemneshinjournalistjohnhemsedalhepf" +
+ "orgeherokussldheroyhgtvallee-aosteroyhigashichichibunkyonanaoshi" +
+ "mageandsoundandvisionhigashihiroshimanehigashiizumozakitakatakam" +
+ "oriokalmykiahigashikagawahigashikagurasoedahigashikawakitaaikita" +
+ "kyushuaiahigashikurumeiwamarshallstatebankfhappouhigashimatsushi" +
+ "maritimodernhigashimatsuyamakitaakitadaitoigawahigashimurayamamo" +
+ "torcycleshinjukumanohigashinarusembokukitamidsundhigashinehigash" +
+ "iomihachimanchesterhigashiosakasayamanakakogawahigashishirakawam" +
+ "atakanabeautydalhigashisumiyoshikawaminamiaikitamotosumitakagild" +
+ "eskaliszhigashitsunowruzhgorodeohigashiurausukitanakagusukumodum" +
+ "inamiiselectravelchannelhigashiyamatokoriyamanashifteditchyourip" +
+ "fizerhigashiyodogawahigashiyoshinogaris-a-playerhiraizumisatohob" +
+ "by-sitehirakatashinagawahiranais-a-republicancerresearchaeologic" +
+ "aliforniahirarahiratsukagawahirayaitakanezawahistorichouseshinka" +
+ "migotoyohashimotoshimahitachiomiyaginankokubunjis-a-rockstaracho" +
+ "wicehitachiotagooglecodespotravelersinsurancehitraeumtgeradeloit" +
+ "tevadsoccertificationhjartdalhjelmelandholeckobierzyceholidayhom" +
+ "eipgfoggiahomelinkhakassiahomelinuxn--32vp30haebaruminamifuranoh" +
+ "omeofficehomesecuritymaceratakaokaluganskodjejuifminamiizukamiok" +
+ "amikitayamatsuris-a-socialistmein-vigorgehomesecuritypccwinnersh" +
+ "inshinotsurgeryhomesenseminehomeunixn--3bst00minamimakis-a-soxfa" +
+ "nhondahoneywellbeingzonehongopocznosegawahonjyoitakarazukamakura" +
+ "zakitashiobarahornindalhorseoulminamiminowahortendofinternet-dns" +
+ "hinshirohospitalhoteleshintokushimahotmailhoyangerhoylandetroits" +
+ "kolelhumanitieshintomikasaharahurdalhurumajis-a-studentalhyllest" +
+ "adhyogoris-a-teacherkassymantechnologyhyugawarahyundaiwafunehzch" +
+ "onanbuildingripescaravantaajlchoyodobashichikashukujitawarajlljm" +
+ "pharmacienshirakofuefukihaboromskoguchikuzenjnjeonnamerikawauejo" +
+ "yokaichibahcavuotnagaranzannefrankfurtrentino-alto-adigejpmorgan" +
+ "jpnjprshiranukamogawajuniperjurkoshunantokigawakosugekotohiradom" +
+ "ainsureggiocalabriakotourakouhokutamakis-an-artisteinkjerusalemb" +
+ "roiderykounosupplieshiraokanagawakouyamashikokuchuokouzushimasoy" +
+ "kozagawakozakis-an-engineeringkpnkppspdnshiratakahagivestbytomar" +
+ "idagawassamukawataricohdatingkrasnodarkredirectmeldalkristiansan" +
+ "dcatshishikuis-an-entertainerkristiansundkrodsheradkrokstadelval" +
+ "daostarostwodzislawioshisognekryminamisanrikubetsupportrentino-a" +
+ "ltoadigekumatorinokumejimasudakumenanyokkaichirurgiens-dentistes" +
+ "-en-francekunisakis-bykunitachiarailwaykunitomigusukumamotoyamas" +
+ "sa-carrara-massacarraramassabusinessebyklegallocus-1kunneppulawy" +
+ "kunstsammlungkunstunddesignkuokgrouphdkureggioemiliaromagnakayam" +
+ "atsumaebashikshacknetrentino-s-tirollagrigentomologyeonggiehtavu" +
+ "oatnagaivuotnagaokakyotambabia-goracleaningkurgankurobelaudibleb" +
+ "timnetzkurogimilanokuroisoftwarendalenugkuromatsunais-certifiedo" +
+ "gawarabikomaezakirunorthwesternmutualkurotakikawasakis-foundatio" +
+ "nkushirogawakusupplykutchanelkutnokuzumakis-gonekvafjordkvalsund" +
+ "kvamfamberkeleykvanangenkvinesdalkvinnheradkviteseidskogkvitsoyk" +
+ "wpspiegelkzmissilevangermisugitokorozawamitourismolancastermitoy" +
+ "oakemiuramiyazumiyotamanomjondalenmlbfanmonmouthagebostadmonster" +
+ "monticellombardiamondshisuifuelveruminamitanemontrealestatefarme" +
+ "quipmentrentino-stirolmonza-brianzaporizhzhiamonza-e-della-brian" +
+ "zapposhitaramamonzabrianzaptokuyamatsusakahoginowaniihamatamakaw" +
+ "ajimarburgmonzaebrianzaramonzaedellabrianzamoparachutingmordovia" +
+ "jessheiminamiuonumatsumotofukemoriyamatsushigemoriyoshimilitarym" +
+ "ormoneymoroyamatsuuramortgagemoscowitdkmpspbarcelonagasakijobser" +
+ "verisignieznord-odalaziobihirosakikamijimassnasaarlandd-dnshome-" +
+ "webservercellikes-piedmontblancomeeres3-ap-southeast-1moseushist" +
+ "orymosjoenmoskeneshizukuishimofusaitamatsukuris-into-gamessinats" +
+ "ukigatakasagotembaixadamosshizuokananporovigotpantheonsitemosvik" +
+ "nx-serveronakatsugawamoteginozawaonsenmoviemovistargardmtpchrist" +
+ "masakikugawatchesarufutsunomiyawakasaikaitakoelniyodogawamtranby" +
+ "muenstermugithubcloudusercontentrentino-sud-tirolmuikamisatokama" +
+ "chippubetsubetsugarumukochikushinonsenergymulhouservebeermunakat" +
+ "anemuncieszynmuosattemuphiladelphiaareadmyblogsitemurmanskolobrz" +
+ "egersundmurotorcraftrentino-sudtirolmusashimurayamatsuzakis-leet" +
+ "rdmusashinoharamuseetrentino-sued-tirolmuseumverenigingmutsuzawa" +
+ "mutuellewismillermy-vigorlicemy-wanggouvicenzamyactivedirectorym" +
+ "yasustor-elvdalmycdn77-securechtrainingmydissentrentino-suedtiro" +
+ "lmydrobofagemydshoujis-lostre-toteneis-a-techietis-a-therapistoi" +
+ "amyeffectrentinoa-adigemyfirewallonieruchomoscienceandindustrynm" +
+ "yfritzmyftpaccesshowamyfusionmyhome-serverrankoshigayamelhusgard" +
+ "enmykolaivaolbia-tempio-olbiatempioolbialystokkepnogiftshowtimet" +
+ "eorapphilatelymymediapchromedicaltanissettairamyokohamamatsudamy" +
+ "pepsongdalenviknakanojohanamakinoharamypetshriramlidlugolekagami" +
+ "nogatagajobojis-not-certifieducatorahimeshimakanegasakinkobayash" +
+ "ikaoirminamiogunicomcastresistancemyphotoshibahccavuotnagareyama" +
+ "lborkdalvdalcesienarashinomypsxn--3e0b707emysecuritycamerakermys" +
+ "hopblocksigdalmyvnchryslerpictetrentinoaadigepicturesimple-urlpi" +
+ "emontepilotsirdalpimientaketomisatolgapinkomakiyosunndalpioneerp" +
+ "ippuphoenixn--3oq18vl8pn36apiszpittsburghofauskedsmokorsetagayas" +
+ "ells-for-ulvikautokeinopiwatepizzapkomatsushimashikizunokunimiho" +
+ "boleslawiechristiansburgriwataraidyndns-picsarpsborgroks-thisaya" +
+ "manobeokakudamatsueplanetariuminamiyamashirokawanabellevuelosang" +
+ "elesjaguarchitecturealtorlandplantationplantslingplatforminanopl" +
+ "aystationplazaplchungnamdalseidfjordyndns-remotewdyndns-serverda" +
+ "luroyplombardynamisches-dnslupskomforbarclaycards3-website-ap-no" +
+ "rtheast-1plumbingopmnpodzonepohlpoivronpokerpokrovskommunalforbu" +
+ "ndpolitiendapolkowicepoltavalle-aostathellexusdecorativeartsnoas" +
+ "aitomobellunorddalpomorzeszowithgoogleapisa-hockeynutsiracusakat" +
+ "akinouepordenonepornporsangerporsanguidelmenhorstalbansokanazawa" +
+ "porsgrunnanpoznanpraxis-a-bookkeeperugiaprdpreservationpresidiop" +
+ "rgmrprimeloyalistockholmestrandprincipeprivatizehealthinsurancep" +
+ "rochowiceproductionsokndalprofbsbxn--1lqs03nprogressivegasiaproj" +
+ "ectrentinoalto-adigepromombetsurfbx-ostrowwlkpmgulenpropertyprot" +
+ "ectionprotonetrentinoaltoadigeprudentialpruszkowithyoutubentleyp" +
+ "rzeworskogptplusterpvtrentinos-tirolpwchurchaseljeepostfoldnavyp" +
+ "zqldqponqslgbtrentinostirolquicksytesolarssonqvcirclegnicafedera" +
+ "tionstufftoread-booksnesolundbeckommunestuttgartrentoyokawasusak" +
+ "is-slickharkovalleeaosteigensusonosuzakaneyamazoesuzukaniepcesuz" +
+ "ukis-uberleetrentino-a-adigesvalbardunloppacificircustomersveios" +
+ "velvikomvuxn--3ds443gsvizzeraswedenswidnicarrierswiebodzindianap" +
+ "olis-a-bloggerswiftcoversicherungswinoujscienceandhistoryswisshi" +
+ "kis-very-badaddjamisonsynology-dsolutionsolognetuscanytushuissie" +
+ "r-justicetuvalle-daostaticsootuxfamilyvenneslaskerrylogisticsopo" +
+ "trentinosud-tirolvestfoldvestnesor-odalvestre-slidreamhostersor-" +
+ "varangervestre-totennishiawakuravestvagoyvevelstadvibo-valentiav" +
+ "ibovalentiavideovillaskoyabearalvahkihokumakogengerdalpha-myqnap" +
+ "cloudapplebesbydgoszczecinemakeupowiathletajimabariakembuchikuma" +
+ "gayagawakuyabukicks-assedicitadeliveryvinnicartiervinnytsiavipsi" +
+ "naapphonefossilkomaganevirginiavirtualvirtueeldomeindianmarketin" +
+ "gvirtuelvisakegawavistaprinternationalfirearmsorfoldviterboltroa" +
+ "ndinosaurepaircraftrevisohughesomavivoldavlaanderenvladikavkazim" +
+ "ierz-dolnyvladimirvlogoiphotographysiovolkswagentsorreisahayakaw" +
+ "akamiichikawamisatotalvologdanskongsvingervolvolkenkundenvolyngd" +
+ "alvossevangenvotevotingvotoyonakagyokutoursortlandworldworse-tha" +
+ "ndawowiwatsukiyonowritesthisblogsytewroclawloclawekoninjavald-ao" +
+ "starnbergwtciticatholicheltenham-radio-opencraftranagatorodoywtf" +
+ "bxosciencecentersciencehistorywuozuwwwmflabsorumincommbanklabudh" +
+ "abikinokawabarthagakhanamigawawzmiuwajimaxn--4gq48lf9jetztrentin" +
+ "o-aadigexn--4it168dxn--4it797konsulatrobeepilepsydneyxn--4pvxsou" +
+ "thcarolinazawaxn--54b7fta0ccivilizationxn--55qw42gxn--55qx5dxn--" +
+ "5js045dxn--5rtp49civilwarmanagementmpalmspringsakerxn--5rtq34kon" +
+ "yvelolxn--5su34j936bgsgxn--5tzm5gxn--6btw5axn--6frz82gxn--6orx2r" +
+ "xn--6qq986b3xlxn--7t0a264claimsasayamaxn--80adxhksouthwestfalenx" +
+ "n--80ao21axn--80aqecdr1axn--80asehdbarefootballooningjesdalillyo" +
+ "mbondiscountysnes3-website-ap-southeast-2xn--80aswgxn--80audneda" +
+ "lnxn--8ltr62kooris-an-actorxn--8pvr4uxn--8y0a063axn--90a3academy" +
+ "-firewall-gatewayxn--90aishobaraomoriguchiharahkkeravjuedischesa" +
+ "peakebayernrtrogstadxn--90azhytomyrxn--9dbhblg6dietcimdbargainst" +
+ "itutelemarkaratsuginamikatagamiharuconnectatarantottoribestadisc" +
+ "overyomitanobirastronomy-gatewayokosukanzakiwienaturalsciencesna" +
+ "turelles3-ap-southeast-2xn--9dbq2axn--9et52uxn--9krt00axn--andy-" +
+ "iraxn--aroport-byanaizuxn--asky-iraxn--aurskog-hland-jnbarreauct" +
+ "ionayorovnobninskarelianceu-1xn--avery-yuasakuhokkaidontexistein" +
+ "geekopervikhmelnitskiyamashikexn--b-5gaxn--b4w605ferdxn--bck1b9a" +
+ "5dre4clickatowicexn--bdddj-mrabdxn--bearalvhki-y4axn--berlevg-jx" +
+ "axn--bhcavuotna-s4axn--bhccavuotna-k7axn--bidr-5nachikatsuuraxn-" +
+ "-bievt-0qa2xn--bjarky-fyandexn--3pxu8konskowolayangroupharmacysh" +
+ "iraois-an-accountantshinyoshitomiokamitsuexn--bjddar-ptamayufuet" +
+ "tertdasnetzxn--blt-elabourxn--bmlo-graingerxn--bod-2naroyxn--brn" +
+ "ny-wuaccident-investigation-aptibleaseating-organicbcn-north-1xn" +
+ "--brnnysund-m8accident-prevention-webhopenairbusantiquest-a-la-m" +
+ "aisondre-landebudapest-a-la-masionionjukudoyamagazineat-urlxn--b" +
+ "rum-voagatromsakakinokiaxn--btsfjord-9zaxn--c1avgxn--c2br7gxn--c" +
+ "3s14mintelligencexn--cck2b3barrel-of-knowledgemologicallyngenvir" +
+ "onmentalconservationflfanfshostrolekamisunagawaugustowadaegubs3-" +
+ "ca-central-1xn--cg4bkis-very-evillagexn--ciqpnxn--clchc0ea0b2g2a" +
+ "9gcdn77-sslattumisakis-into-carshioyanagawaxn--comunicaes-v6a2ox" +
+ "n--correios-e-telecomunicaes-ghc29axn--czr694barrell-of-knowledg" +
+ "eologyonagoyaukraanghkeymachineustarhubalestrandabergamoareke164" +
+ "xn--czrs0tromsojaworznoxn--czru2dxn--czrw28bashkiriaurskog-holan" +
+ "droverhalla-speziaeroportalaheadjudaicaaarborteaches-yogasawarac" +
+ "ingroks-theatree12xn--d1acj3basilicataniaustevollarvikarasjokara" +
+ "suyamarylhurstjordalshalsenaturbruksgymnaturhistorisches3-eu-cen" +
+ "tral-1xn--d1alfaromeoxn--d1atrusteexn--d5qv7z876clinichernigover" +
+ "nmentjometlifeinsurancexn--davvenjrga-y4axn--djrs72d6uyxn--djty4" +
+ "koryokamikawanehonbetsurutaharaxn--dnna-grajewolterskluwerxn--dr" +
+ "bak-wuaxn--dyry-iraxn--e1a4cliniquenoharaxn--eckvdtc9dxn--efvn9s" +
+ "owaxn--efvy88haibarakitahatakamatsukawaxn--ehqz56nxn--elqq16hair" +
+ "-surveillancexn--estv75gxn--eveni-0qa01gaxn--f6qx53axn--fct429ko" +
+ "saigawaxn--fhbeiarnxn--finny-yuaxn--fiq228c5hspjelkavikomonoxn--" +
+ "fiq64basketballfinanzgoraustinnatuurwetenschappenaumburgjemnes3-" +
+ "eu-west-1xn--fiqs8spreadbettingxn--fiqz9spydebergxn--fjord-lraxn" +
+ "--fjq720axn--fl-ziaxn--flor-jraxn--flw351exn--fpcrj9c3dxn--frde-" +
+ "grandrapidsrlxn--frna-woaraisaijotrvarggatritonxn--frya-hraxn--f" +
+ "zc2c9e2clintonoshoesaseboknowsitallutskypexn--fzys8d69uvgmailxn-" +
+ "-g2xx48clothingrondarxn--gckr3f0fermobilyxn--gecrj9cloudnsdojoet" +
+ "suwanouchikujogaszczytnore-og-uvdaluxembourgrongaxn--ggaviika-8y" +
+ "a47hakatanotogawaxn--gildeskl-g0axn--givuotna-8yaotsurreyxn--gjv" +
+ "ik-wuaxn--gk3at1exn--gls-elacaixaxn--gmq050is-very-goodhandsonxn" +
+ "--gmqw5axn--h-2failxn--h1aeghakodatexn--h2brj9cnsaskatchewanxn--" +
+ "hbmer-xqaxn--hcesuolo-7ya35batodayonaguniversityoriikariyakumold" +
+ "eltaiwanairlinedre-eikerxn--hery-iraxn--hgebostad-g3axn--hmmrfea" +
+ "sta-s4acctrysiljan-mayenxn--hnefoss-q1axn--hobl-iraxn--holtlen-h" +
+ "xaxn--hpmir-xqaxn--hxt814exn--hyanger-q1axn--hylandet-54axn--i1b" +
+ "6b1a6a2exn--imr513nxn--indery-fyasakaiminatoyonezawaxn--io0a7is-" +
+ "very-nicexn--j1aeferraraxn--j1amhakonexn--j6w193gxn--jlq61u9w7ba" +
+ "tsfjordishakotankarlsoyoshiokarasjohkamikoaniikappugliaustraliai" +
+ "sondriodejaneirochesterhcloudfunctions3-external-1xn--jlster-bya" +
+ "sugis-very-sweetpepperxn--jrpeland-54axn--jvr189misasaguris-into" +
+ "-cartoonshirahamatonbetsurnadalxn--k7yn95exn--karmy-yuaxn--kbrq7" +
+ "oxn--kcrx77d1x4axn--kfjord-iuaxn--klbu-woaxn--klt787dxn--kltp7dx" +
+ "n--kltx9axn--klty5xn--42c2d9axn--koluokta-7ya57hakubadajozorahol" +
+ "taleniwaizumiotsukumiyamazonawsabaerobaticketshimonosekikawaxn--" +
+ "kprw13dxn--kpry57dxn--kpu716ferrarivnexn--kput3is-with-thebandoo" +
+ "mdnsiskinkyotobetsumidatlantichoseiroumuenchenisshingugexn--krag" +
+ "er-gyasuokanraxn--kranghke-b0axn--krdsherad-m8axn--krehamn-dxaxn" +
+ "--krjohka-hwab49jevnakershuscultureggio-emilia-romagnakatombetsu" +
+ "my-routerxn--ksnes-uuaxn--kvfjord-nxaxn--kvitsy-fyatomitamamurax" +
+ "n--kvnangen-k0axn--l-1fairwindsrtrentinosudtirolxn--l1accenturek" +
+ "lamborghiniizaxn--laheadju-7yatsukanumazuryxn--langevg-jxaxn--lc" +
+ "vr32dxn--ldingen-q1axn--leagaviika-52bauhausposts-and-telecommun" +
+ "icationsncfdivtasvuodnakaiwamizawaustrheimatunduhrennesoyokotebi" +
+ "nagisochildrensgardenaustdalavagiskebinorfolkebibleikangerxn--le" +
+ "sund-huaxn--lgbbat1ad8jewelryxn--lgrd-poacoachampionshiphoptobam" +
+ "agentositelekommunikationlinebraskaunjargallupinbbcaseihichisobe" +
+ "tsuitainairforceoceanographics3-website-eu-west-1xn--lhppi-xqaxn" +
+ "--linds-pramericanartulangevagrarboretumbriamallamaintenancechir" +
+ "ealminnesotaketakatsukis-into-animelbournexn--lns-qlansrvareserv" +
+ "eblogspotrentinosued-tirolxn--loabt-0qaxn--lrdal-sraxn--lrenskog" +
+ "-54axn--lt-liacntoyonoxn--lten-granexn--lury-iraxn--mely-iraxn--" +
+ "merker-kuaxn--mgb2ddestordalxn--mgb9awbferreroticanonoichinomiya" +
+ "kexn--mgba3a3ejtunesomnaritakurashikis-savedunetbankharkivguccip" +
+ "rianiigataishinomakimobetsuliguriaxn--mgba3a4f16axn--mgba3a4fran" +
+ "amizuholdingsmileksvikosakaerodromegalsacebetsukubankhmelnytskyi" +
+ "vanylvenicexn--mgba7c0bbn0axn--mgbaakc7dvfetsundynvpnxn--mgbaam7" +
+ "a8hakuis-a-nascarfanxn--mgbab2bdxn--mgbai9a5eva00bbtateshinanoma" +
+ "chintaifun-dnsaliaskimitsubatamicable-modembetsukuibigawauthorda" +
+ "landroiddnskingjerdrumckinseyokozebizenakaniikawatanaguraetnagah" +
+ "amaroygardendoftheinternetflixilovecollegefantasyleaguernseyboml" +
+ "oans3-ap-northeast-2xn--mgbai9azgqp6jewishartgalleryxn--mgbayh7g" +
+ "padualstackspace-to-rentalstomakomaibaraxn--mgbb9fbpobanazawaxn-" +
+ "-mgbbh1a71exn--mgbc0a9azcgxn--mgbca7dzdoxn--mgberp4a5d4a87gxn--m" +
+ "gberp4a5d4arxn--mgbi4ecexposedxn--mgbpl2fhskleppiagetmyiphilipsy" +
+ "nology-diskstationxn--mgbqly7c0a67fbcolonialwilliamsburgrossetou" +
+ "chijiwadellogliastradingroundhandlingroznyxn--mgbqly7cvafredriks" +
+ "tadtvstoreitrentinosuedtirolxn--mgbt3dhdxn--mgbtf8flatangerxn--m" +
+ "gbtx2bbvacationswatch-and-clockerxn--mgbx4cd0abbottunkongsbergxn" +
+ "--mix082fgunmarcheaparisor-fronxn--mix891fhvalerxn--mjndalen-64a" +
+ "xn--mk0axindustriesteambulancexn--mk1bu44coloradoplateaudioxn--m" +
+ "kru45isleofmandalxn--mlatvuopmi-s4axn--mli-tlanxesstorfjordxn--m" +
+ "lselv-iuaxn--moreke-juaxn--mori-qsakuragawaxn--mosjen-eyatsushir" +
+ "oxn--mot-tlapyxn--mre-og-romsdal-qqbeppublishproxyzgorzeleccolog" +
+ "newspaperxn--msy-ula0hakusandiegoodyearthadselfipassagenshimonit" +
+ "ayanagitlaborxn--mtta-vrjjat-k7afamilycompanycolumbusheyxn--muos" +
+ "t-0qaxn--mxtq1misawaxn--ngbc5azdxn--ngbe9e0axn--ngbrxn--45brj9ci" +
+ "vilaviationxn--nit225koseis-an-actresshiojirishirifujiedaxn--nme" +
+ "sjevuemie-tcbalatinord-frontierxn--nnx388axn--nodexn--nqv7fs00em" +
+ "axn--nry-yla5gxn--ntso0iqx3axn--ntsq17gxn--nttery-byaeservecount" +
+ "erstrikexn--nvuotna-hwaxn--nyqy26axn--o1achattanooganordreisa-ge" +
+ "ekosherbrookegawaxn--o3cw4haldenxn--od0algxn--od0aq3bernuorockar" +
+ "tuzyukibmdivttasvuotnakamagayachts3-website-sa-east-1xn--ogbpf8f" +
+ "lekkefjordxn--oppegrd-ixaxn--ostery-fyawaraxn--osyro-wuaxn--p1ac" +
+ "fidonnakamuratajimicrolightinguovdageaidnunzenxn--p1aissmarterth" +
+ "anyouxn--pbt977communitysfjordyndns-weberlincolnxn--pgbs0dhlxn--" +
+ "porsgu-sta26fieldyroyrvikinguitarschweizparaglidingujolsterxn--p" +
+ "ssu33lxn--pssy2uxn--q9jyb4comobaraxn--qcka1pmcdonaldstpetersburg" +
+ "xn--qqqt11misconfusedxn--qxamuneuestreamsterdamnserverbaniaxn--r" +
+ "ady-iraxn--rdal-poaxn--rde-ulaquilancashirehabmerxn--rdy-0nabari" +
+ "wchoshibuyachiyodavvenjargaulardalukowiiheyaizuwakamatsubushikus" +
+ "akadogawaxn--rennesy-v1axn--rhkkervju-01aflakstadaokagakibichuox" +
+ "n--rholt-mragowoodsidexn--rhqv96gxn--rht27zxn--rht3dxn--rht61exn" +
+ "--risa-5narusawaxn--risr-iraxn--rland-uuaxn--rlingen-mxaxn--rmsk" +
+ "og-byawatahamaxn--rny31halsaintlouis-a-anarchistoireggio-calabri" +
+ "axn--rovu88beskidyn-vpncasertaipeiheijiinetnedalimanowarudautomo" +
+ "tivecodyn-o-saurlandes3-fips-us-gov-west-1xn--rros-granvindafjor" +
+ "dxn--rskog-uuaxn--rst-0narutokyotangovturystykannamihamadaxn--rs" +
+ "ta-francaiseharaxn--ryken-vuaxn--ryrvik-byaxn--s-1faitheguardian" +
+ "xn--s9brj9comparemarkerryhotelsassaris-a-doctorayxn--sandnessjen" +
+ "-ogbizxn--sandy-yuaxn--seral-lraxn--ses554gxn--sgne-gratangenxn-" +
+ "-skierv-utazaskvolloabathsbcompute-1xn--skjervy-v1axn--skjk-soax" +
+ "n--sknit-yqaxn--sknland-fxaxn--slat-5narviikamishihoronobeauxart" +
+ "sandcraftstudioxn--slt-elabbvieeexn--smla-hraxn--smna-gratis-a-b" +
+ "ruinsfanxn--snase-nraxn--sndre-land-0cbstudyndns-at-homedepotenz" +
+ "amamicrosoftbankomorotsukaminoyamaxunusualpersonxn--snes-poaxn--" +
+ "snsa-roaxn--sr-aurdal-l8axn--sr-fron-q1axn--sr-odal-q1axn--sr-va" +
+ "ranger-ggbestbuyshouses3-website-us-east-1xn--srfold-byaxn--srre" +
+ "isa-q1axn--srum-grazxn--stfold-9xaxn--stjrdal-s1axn--stjrdalshal" +
+ "sen-sqbetainaboxfusejnynysadodgeometre-experts-comptables3-websi" +
+ "te-us-west-1xn--stre-toten-zcbieigersundiyukuhashimoichinosekiga" +
+ "harautoscanadaejeonbukaratehimeji234xn--t60b56axn--tckweathercha" +
+ "nnelxn--tiq49xqyjfkhersonxn--tjme-hraxn--tn0agrinet-freakstuff-4" +
+ "-salexn--tnsberg-q1axn--tor131oxn--trany-yuaxn--trgstad-r1axn--t" +
+ "rna-woaxn--troms-zuaxn--tysvr-vraxn--uc0atvaroyxn--uc0ay4axn--ui" +
+ "st22hammarfeastafricapetownnews-stagingxn--uisz3gxn--unjrga-rtao" +
+ "baokinawashirosatochiokinoshimalatvuopmiasakuchinotsuchiurakawal" +
+ "brzycharternopilawalesundxn--unup4yxn--uuwu58axn--vads-jraxn--va" +
+ "rd-jraxn--vegrshei-c0axn--vermgensberater-ctbielawalterxn--vermg" +
+ "ensberatung-pwbiellaakesvuemielecceu-2xn--vestvgy-ixa6oxn--vg-yi" +
+ "abcgxn--vgan-qoaxn--vgsy-qoa0jgoraxn--vgu402computerhistoryofsci" +
+ "ence-fictionxn--vhquvbarclays3-website-ap-southeast-1xn--vler-qo" +
+ "axn--vre-eiker-k8axn--vrggt-xqadxn--vry-yla5gxn--vuq861bieszczad" +
+ "ygeyachimataikikonaioirasebastopologyeongnamegawakeisenbahnhlfan" +
+ "hs3-website-us-west-2xn--w4r85el8fhu5dnraxn--w4rs40lxn--wcvs22dx" +
+ "n--wgbh1comsecuritytacticsatxn--1ck2e1balsfjordgcahcesuolodingen" +
+ "aval-d-aosta-valleyolasitemrxn--wgbl6axn--xhq521bievatmallorcada" +
+ "quesakuraiitatebayashiibaghdadultateyamaveroykenglanddnss3-sa-ea" +
+ "st-1xn--xkc2al3hye2axn--xkc2dl3a5ee0hamurakamigoriginshimosuwalk" +
+ "is-a-nurservebbshimotsukexn--y9a3aquariumishimatsunoxn--yer-znar" +
+ "vikoshimizumakis-an-anarchistoricalsocietyxn--yfro4i67oxn--ygard" +
+ "en-p1axn--ygbi2ammxn--45q11civilisationxn--ystre-slidre-ujbifuka" +
+ "gawarszawashingtondclkarmoyurihonjoyentatsunoceanographiquevents" +
+ "akyotanabeneventoeidsvollimitednpagefrontappagespeedmobilizerodd" +
+ "avocatanzarowegroweibolzanordkappgafanpachigasakidsmynasushiobar" +
+ "agusarts3-us-east-2xn--zbx025dxn--zf0ao64axn--zf0avxn--4gbrimini" +
+ "ngxn--zfr164bihorologyusuharavoues3-us-gov-west-1xperiaxz"
// nodes is the list of nodes. Each node is represented as a uint32, which
// encodes the node's children, wildcard bit and node type (as an index into
@@ -482,8141 +483,8127 @@ const text = "biellaakesvuemieleccebieszczadygeyachimatainaircraftraeumtgerade"
// [15 bits] text index
// [ 6 bits] text length
var nodes = [...]uint32{
- 0x29e943,
- 0x364444,
- 0x28af46,
- 0x371983,
- 0x371986,
- 0x394246,
- 0x3a4103,
- 0x202f04,
- 0x24f607,
- 0x28ab88,
- 0x1a00882,
- 0x309dc7,
- 0x3533c9,
- 0x2fb3ca,
- 0x2fb3cb,
- 0x22fe43,
- 0x28cac6,
- 0x2352c5,
- 0x1e00702,
- 0x211ac4,
- 0x2c7a83,
- 0x226bc5,
- 0x2200d42,
- 0x2a0f43,
- 0x2707e44,
- 0x368485,
- 0x2a00c42,
- 0x3797ce,
- 0x24a483,
- 0x38b406,
- 0x2e04642,
- 0x2a5907,
- 0x237d46,
- 0x3200a42,
- 0x2ae043,
- 0x2ae044,
- 0x280f86,
- 0x36f448,
- 0x283a46,
- 0x386144,
- 0x3601002,
- 0x326a09,
- 0x363a07,
- 0x3351c6,
- 0x355049,
- 0x293988,
- 0x367104,
- 0x3a6606,
- 0x20e306,
- 0x3a02e02,
- 0x241d0f,
- 0x33174e,
- 0x212484,
- 0x2bb945,
- 0x202e05,
- 0x2ea589,
- 0x23e889,
- 0x325747,
- 0x221646,
- 0x26b083,
- 0x3e056c2,
- 0x346fc3,
- 0x207a4a,
- 0x211e83,
- 0x250585,
- 0x2040c2,
- 0x2830c9,
- 0x4204802,
- 0x209084,
- 0x29e486,
- 0x284b45,
- 0x34c904,
- 0x4a74a04,
- 0x204803,
- 0x234304,
- 0x4e01842,
- 0x364184,
- 0x52e41c4,
- 0x22410a,
- 0x56009c2,
- 0x334307,
- 0x38e008,
- 0x6201182,
- 0x322847,
- 0x2b7344,
- 0x2b7347,
- 0x383d05,
- 0x370a47,
- 0x325506,
- 0x332a44,
- 0x340c85,
- 0x28df47,
- 0x72046c2,
- 0x349183,
- 0x218782,
- 0x366703,
- 0x76108c2,
- 0x2798c5,
- 0x7a02d42,
- 0x368ac4,
- 0x277785,
- 0x2123c7,
- 0x2ddc0e,
- 0x330a44,
- 0x244744,
- 0x20ca03,
- 0x326ec9,
- 0x30528b,
- 0x30e148,
- 0x31cd88,
- 0x320888,
- 0x20a588,
- 0x354e8a,
- 0x370947,
- 0x217906,
- 0x7e9c3c2,
- 0x377d83,
- 0x380c43,
- 0x38bc84,
- 0x250ac3,
- 0x3a4143,
- 0x1713b02,
- 0x8203182,
- 0x2484c5,
- 0x30c046,
- 0x2c9bc4,
- 0x396e07,
- 0x22eec6,
- 0x280304,
- 0x3a7dc7,
- 0x203183,
- 0x86bdb82,
- 0x8a4f882,
- 0x8e13702,
- 0x213706,
+ 0x32f983,
+ 0x28a344,
+ 0x30e286,
+ 0x371b43,
+ 0x371b46,
+ 0x394646,
+ 0x3a5003,
+ 0x367844,
+ 0x260687,
+ 0x30dec8,
+ 0x1a04cc2,
+ 0x316e47,
+ 0x355d89,
+ 0x32228a,
+ 0x32228b,
+ 0x22eec3,
+ 0x28fac6,
+ 0x2327c5,
+ 0x1e04e02,
+ 0x217c04,
+ 0x2a90c3,
+ 0x3ac705,
+ 0x2203942,
+ 0x329e03,
+ 0x26957c4,
+ 0x368e05,
+ 0x2a10182,
+ 0x3787ce,
+ 0x253343,
+ 0x3a03c6,
+ 0x2e00142,
+ 0x30e407,
+ 0x23ae46,
+ 0x3200c42,
+ 0x22a343,
+ 0x254b04,
+ 0x325a86,
+ 0x35c208,
+ 0x28a706,
+ 0x21ad04,
+ 0x3601442,
+ 0x332309,
+ 0x207587,
+ 0x256286,
+ 0x339309,
+ 0x29d788,
+ 0x328d44,
+ 0x364906,
+ 0x36b606,
+ 0x3a02942,
+ 0x27144f,
+ 0x20f94e,
+ 0x2131c4,
+ 0x2c6085,
+ 0x367745,
+ 0x385989,
+ 0x241a89,
+ 0x368047,
+ 0x23c9c6,
+ 0x273a43,
+ 0x3e02342,
+ 0x2df283,
+ 0x205aca,
+ 0x221d83,
+ 0x303145,
+ 0x289c02,
+ 0x289c09,
+ 0x4200f82,
+ 0x203d84,
+ 0x2250c6,
+ 0x2eb205,
+ 0x34cbc4,
+ 0x4a04c04,
+ 0x205283,
+ 0x231ac4,
+ 0x4e02e02,
+ 0x209f04,
+ 0x52f4e04,
+ 0x24ae0a,
+ 0x5601342,
+ 0x303907,
+ 0x26b8c8,
+ 0x6202f82,
+ 0x31cf07,
+ 0x2c2e04,
+ 0x2c2e07,
+ 0x373d85,
+ 0x357a47,
+ 0x367e06,
+ 0x2e8384,
+ 0x39c0c5,
+ 0x294847,
+ 0x7206cc2,
+ 0x34f703,
+ 0x200582,
+ 0x200583,
+ 0x76125c2,
+ 0x221ec5,
+ 0x7a02302,
+ 0x27bd84,
+ 0x2810c5,
+ 0x213107,
+ 0x269f0e,
+ 0x224bc4,
+ 0x206a84,
+ 0x211503,
+ 0x2ceac9,
+ 0x2ed94b,
+ 0x3a6548,
+ 0x3148c8,
+ 0x318dc8,
+ 0x237908,
+ 0x33914a,
+ 0x357947,
+ 0x318146,
+ 0x7ea4fc2,
+ 0x35bc03,
+ 0x366c43,
+ 0x371144,
+ 0x3a5043,
+ 0x324cc3,
+ 0x171f542,
+ 0x8203682,
+ 0x252185,
+ 0x2a11c6,
+ 0x2d6d44,
+ 0x2f6e07,
+ 0x382986,
+ 0x319dc4,
+ 0x398247,
+ 0x20f7c3,
+ 0x86c8902,
+ 0x8b124c2,
+ 0x8e1c502,
+ 0x21c506,
0x9200002,
- 0x37f645,
- 0x315043,
- 0x205244,
- 0x2dbe44,
- 0x2dbe45,
- 0x207043,
- 0x9723ac3,
- 0x9a093c2,
- 0x2873c5,
- 0x2873cb,
- 0x22d086,
- 0x20cbcb,
- 0x26ff44,
- 0x20d189,
- 0x20ed44,
- 0x9e0fd82,
- 0x210c83,
- 0x211183,
- 0x1611302,
- 0x23c343,
- 0x21130a,
- 0xa211d42,
- 0x211d45,
- 0x28ea8a,
- 0x2cd704,
- 0x212d43,
- 0x213384,
- 0x213cc3,
- 0x213cc4,
- 0x213cc7,
- 0x214245,
- 0x218dc5,
- 0x219586,
- 0x21a0c6,
- 0x21aa43,
- 0x21dc48,
- 0x258e83,
- 0xa615802,
- 0x21f008,
- 0x21580b,
- 0x222d08,
- 0x223586,
- 0x224547,
- 0x229748,
- 0xb279a82,
- 0xb693f02,
- 0x20b608,
- 0x2ad0c7,
- 0x23b405,
- 0x23b408,
- 0x281888,
- 0x2ada03,
- 0x22eac4,
- 0x38bcc2,
- 0xba2f482,
- 0xbe051c2,
- 0xc62f802,
- 0x22f803,
- 0xca02ec2,
- 0x202ec3,
- 0x2fe704,
- 0x21abc3,
- 0x3670c4,
- 0x24edcb,
+ 0x359b85,
+ 0x320a83,
+ 0x200004,
+ 0x2ee344,
+ 0x2ee345,
+ 0x203e43,
+ 0x9768883,
+ 0x9a07f42,
+ 0x28e245,
+ 0x28e24b,
+ 0x2d0686,
+ 0x20a0cb,
+ 0x225b04,
+ 0x20a7c9,
+ 0x20be84,
+ 0x9e0c0c2,
+ 0x20cf83,
+ 0x210843,
+ 0x1600802,
+ 0x260903,
+ 0x2109ca,
+ 0xa211cc2,
+ 0x217e85,
+ 0x2983ca,
+ 0x2dc184,
+ 0x369f03,
+ 0x315044,
+ 0x213643,
+ 0x213644,
+ 0x213647,
+ 0x213985,
+ 0x213e05,
+ 0x2150c6,
+ 0x2167c6,
+ 0x2182c3,
+ 0x21c188,
+ 0x221c43,
+ 0xa601082,
+ 0x21cac8,
+ 0x21ff0b,
+ 0x2216c8,
+ 0x2221c6,
+ 0x222a47,
+ 0x226488,
+ 0xb2413c2,
+ 0xb6c2fc2,
+ 0x326388,
+ 0x257ec7,
+ 0x22bac5,
+ 0x22bac8,
+ 0x2bf708,
+ 0x3871c3,
+ 0x22a784,
+ 0x371182,
+ 0xba2af82,
+ 0xbe5ba02,
+ 0xc62c1c2,
+ 0x22c1c3,
+ 0xca0e542,
+ 0x367803,
+ 0x2f8e04,
+ 0x218443,
+ 0x328d04,
+ 0x25fe4b,
+ 0x21fe43,
+ 0x2e4d06,
+ 0x226284,
+ 0x2a5a8e,
+ 0x361c05,
+ 0x3a04c8,
+ 0x282247,
+ 0x28224a,
+ 0x229d03,
+ 0x2b3447,
+ 0x2edb05,
+ 0x22ea44,
+ 0x272486,
+ 0x272487,
+ 0x32b704,
+ 0x304ac7,
+ 0x26a244,
+ 0x35bc84,
+ 0x35bc86,
+ 0x386904,
+ 0x20e546,
+ 0x223c83,
+ 0x22b888,
+ 0x30c3c8,
+ 0x24e2c3,
+ 0x2608c3,
+ 0x204f04,
+ 0x395943,
+ 0xce0d882,
+ 0xd2db442,
+ 0x20c043,
+ 0x201806,
+ 0x35c383,
+ 0x28bfc4,
+ 0xd6081c2,
+ 0x2081c3,
+ 0x358243,
+ 0x219942,
+ 0xda02ac2,
+ 0x2c55c6,
+ 0x2334c7,
+ 0x2f7a85,
+ 0x37da44,
+ 0x3723c5,
+ 0x367007,
+ 0x274205,
+ 0x2d3e89,
+ 0x2e0586,
+ 0x2e5488,
+ 0x2f7986,
+ 0xde0db42,
+ 0x362f48,
+ 0x2f8bc6,
+ 0x20db45,
+ 0x304687,
+ 0x30c2c4,
+ 0x30c2c5,
+ 0x28a8c4,
+ 0x28a8c8,
+ 0xe20a182,
+ 0xe60c502,
+ 0x313646,
+ 0x2c28c8,
+ 0x31f145,
+ 0x332c06,
+ 0x3356c8,
+ 0x33e1c8,
+ 0xea0fd45,
+ 0xee0c504,
+ 0x2958c7,
+ 0xf20bbc2,
+ 0xf61c402,
+ 0x1060d1c2,
+ 0x35aa45,
+ 0x2a8505,
+ 0x282606,
+ 0x3698c7,
+ 0x376ec7,
+ 0x10ed0783,
+ 0x2e3447,
+ 0x30dc88,
+ 0x3823c9,
+ 0x378987,
+ 0x390287,
+ 0x3a5b08,
+ 0x3aa206,
+ 0x22e546,
+ 0x22f18c,
+ 0x230b0a,
+ 0x230fc7,
+ 0x23268b,
+ 0x233307,
+ 0x23330e,
+ 0x236244,
+ 0x23a184,
+ 0x23b547,
+ 0x264f47,
+ 0x240d46,
+ 0x240d47,
+ 0x241207,
+ 0x18a20802,
+ 0x2420c6,
+ 0x2420ca,
+ 0x24294b,
+ 0x243407,
+ 0x244ec5,
+ 0x245203,
+ 0x246c46,
+ 0x246c47,
+ 0x241c43,
+ 0x18e38702,
+ 0x24b74a,
+ 0x19356fc2,
+ 0x196acdc2,
+ 0x19a4cec2,
+ 0x19e26982,
+ 0x24da85,
+ 0x24e0c4,
+ 0x1a604d02,
+ 0x209f85,
+ 0x294ac3,
+ 0x20bf85,
+ 0x237804,
+ 0x20a684,
+ 0x2ba5c6,
+ 0x26a546,
+ 0x28e443,
+ 0x3b1484,
+ 0x209383,
+ 0x1aa03b02,
+ 0x263544,
+ 0x263546,
+ 0x295e45,
+ 0x27fdc6,
+ 0x304788,
+ 0x20cb44,
+ 0x2a8e88,
+ 0x343fc5,
+ 0x24a108,
+ 0x2b1cc6,
+ 0x2bddc7,
+ 0x26cdc4,
+ 0x26cdc6,
+ 0x25e303,
+ 0x382e43,
+ 0x2c9388,
+ 0x318bc4,
+ 0x238d47,
+ 0x220246,
+ 0x2dad89,
+ 0x315108,
+ 0x319f08,
+ 0x349184,
+ 0x39b9c3,
+ 0x23e342,
+ 0x1ba34682,
+ 0x1be16102,
+ 0x3b2783,
+ 0x1c204a42,
+ 0x2607c4,
+ 0x390a46,
+ 0x39a6c5,
+ 0x2a4383,
+ 0x232004,
+ 0x2b6f47,
+ 0x26aa43,
+ 0x250d08,
+ 0x20e8c5,
+ 0x370083,
+ 0x281045,
+ 0x281184,
+ 0x2fb8c6,
+ 0x210384,
+ 0x211a46,
+ 0x213046,
+ 0x263004,
+ 0x21fd83,
+ 0x2225c3,
+ 0x1c604e42,
+ 0x377905,
+ 0x222e03,
+ 0x1ca1c3c2,
+ 0x22f143,
+ 0x210085,
+ 0x231b83,
+ 0x231b89,
+ 0x1ce07d02,
+ 0x1d601142,
+ 0x28d9c5,
+ 0x21a746,
+ 0x2d6906,
+ 0x2b94c8,
+ 0x2b94cb,
+ 0x20538b,
+ 0x2f7c85,
+ 0x2e1045,
+ 0x2c9fc9,
+ 0x1600742,
+ 0x2631c8,
+ 0x206044,
+ 0x1de001c2,
+ 0x25fa83,
+ 0x1e665106,
+ 0x20f088,
+ 0x1ea04782,
+ 0x233ec8,
+ 0x1ee01742,
+ 0x225c4a,
+ 0x1f2d0e43,
+ 0x3b1e86,
+ 0x206988,
+ 0x207d48,
+ 0x39a9c6,
+ 0x36d5c7,
+ 0x271647,
+ 0x220b0a,
+ 0x2dc204,
+ 0x3423c4,
+ 0x355589,
+ 0x1fb8fc85,
+ 0x20fb46,
+ 0x208203,
+ 0x251944,
+ 0x201e44,
+ 0x201e47,
+ 0x22cec7,
+ 0x237044,
+ 0x220a45,
+ 0x2826c8,
+ 0x350707,
+ 0x3619c7,
+ 0x1fe041c2,
+ 0x226004,
+ 0x298cc8,
+ 0x381004,
+ 0x24f0c4,
+ 0x24fa45,
+ 0x24fb87,
+ 0x215809,
+ 0x2505c4,
+ 0x2510c9,
+ 0x251308,
+ 0x2516c4,
+ 0x2516c7,
+ 0x20251c43,
+ 0x252487,
+ 0x16101c2,
+ 0x179d442,
+ 0x253386,
+ 0x2539c7,
+ 0x253e84,
+ 0x255607,
+ 0x256907,
+ 0x257483,
+ 0x2abc02,
+ 0x229c02,
+ 0x258743,
+ 0x258744,
+ 0x25874b,
+ 0x3149c8,
+ 0x25f184,
+ 0x2594c5,
+ 0x25ba87,
+ 0x25d8c5,
+ 0x2c4dca,
+ 0x25f0c3,
+ 0x2060da42,
+ 0x22b484,
+ 0x264d09,
+ 0x268983,
+ 0x268a47,
+ 0x28ee89,
+ 0x37b5c8,
+ 0x2d8483,
+ 0x27ff47,
+ 0x280689,
+ 0x2316c3,
+ 0x288284,
+ 0x289389,
+ 0x28c6c6,
+ 0x28dc83,
+ 0x2023c2,
+ 0x24ca43,
+ 0x36ab47,
+ 0x2bfa85,
+ 0x35ba06,
+ 0x256bc4,
+ 0x2d1d45,
+ 0x205a83,
+ 0x218506,
+ 0x20a9c2,
+ 0x391084,
+ 0x22ad02,
+ 0x22ad03,
+ 0x20a00182,
+ 0x29b083,
+ 0x216c44,
+ 0x216c47,
+ 0x200306,
+ 0x201e02,
+ 0x20e01dc2,
+ 0x21e184,
+ 0x2123b882,
+ 0x21600502,
+ 0x2dfcc4,
+ 0x2dfcc5,
+ 0x2b9cc5,
+ 0x262746,
+ 0x21a0ca82,
+ 0x20ca85,
+ 0x210d85,
+ 0x225883,
+ 0x215c06,
+ 0x216dc5,
+ 0x21c482,
+ 0x33de05,
+ 0x21c484,
+ 0x2230c3,
+ 0x223303,
+ 0x21e097c2,
+ 0x294a47,
+ 0x221144,
+ 0x221149,
+ 0x251844,
+ 0x228903,
+ 0x341cc9,
+ 0x3777c8,
+ 0x2a8384,
+ 0x2a8386,
+ 0x210503,
+ 0x259b43,
+ 0x332ec3,
+ 0x222ebc02,
+ 0x30eb82,
+ 0x22600642,
+ 0x3238c8,
+ 0x35c588,
+ 0x394d86,
+ 0x24ed45,
+ 0x2b32c5,
+ 0x200647,
+ 0x228fc5,
+ 0x2630c2,
+ 0x22a9a502,
+ 0x1614502,
+ 0x38fe08,
+ 0x362e85,
+ 0x351d04,
+ 0x2f18c5,
+ 0x3836c7,
+ 0x24f5c4,
+ 0x246f82,
+ 0x22e01182,
+ 0x336f04,
+ 0x2173c7,
+ 0x28e9c7,
+ 0x357a04,
+ 0x298383,
+ 0x24e204,
+ 0x24e208,
+ 0x22e886,
+ 0x27230a,
+ 0x2156c4,
+ 0x298708,
+ 0x259784,
+ 0x222b46,
+ 0x29a4c4,
+ 0x35ad46,
+ 0x221409,
+ 0x25b287,
+ 0x234483,
+ 0x23274842,
+ 0x274843,
+ 0x20c2c2,
+ 0x23651b02,
+ 0x2f0b06,
+ 0x364148,
+ 0x2a9d87,
+ 0x395d09,
+ 0x297f09,
+ 0x2ab245,
+ 0x2ad3c9,
+ 0x2ae045,
+ 0x2ae189,
+ 0x2af5c5,
+ 0x2b0208,
+ 0x27f284,
+ 0x23a8d6c7,
+ 0x294403,
+ 0x2b0407,
+ 0x390646,
+ 0x2b08c7,
+ 0x2a6d45,
+ 0x2a7f83,
+ 0x23e00dc2,
+ 0x392604,
+ 0x2423b8c2,
+ 0x264403,
+ 0x24618d82,
+ 0x307646,
+ 0x26b845,
+ 0x2b2bc7,
+ 0x37f183,
+ 0x324c44,
+ 0x2138c3,
+ 0x2386c3,
+ 0x24a0a3c2,
+ 0x25201a02,
+ 0x394744,
+ 0x2abbc3,
+ 0x38c985,
+ 0x226d85,
+ 0x25602282,
+ 0x25e00bc2,
+ 0x280286,
+ 0x318d04,
+ 0x2491c4,
+ 0x2491ca,
+ 0x26601d42,
+ 0x37324a,
+ 0x204148,
+ 0x26a964c4,
+ 0x201d43,
+ 0x25ff43,
+ 0x318f09,
+ 0x2a8909,
+ 0x2b7046,
+ 0x26e04303,
+ 0x328145,
+ 0x30664d,
+ 0x204306,
+ 0x21268b,
+ 0x27203482,
+ 0x295048,
+ 0x27e1c282,
+ 0x282051c2,
+ 0x37aa85,
+ 0x28600b02,
+ 0x2a3147,
+ 0x212b87,
+ 0x201503,
+ 0x22f848,
+ 0x28a02f02,
+ 0x202f04,
+ 0x217043,
+ 0x38d045,
+ 0x386fc3,
+ 0x2eb106,
+ 0x30bdc4,
+ 0x204ec3,
+ 0x234f83,
+ 0x28e07042,
+ 0x2f7c04,
+ 0x30ed45,
+ 0x35a587,
+ 0x27dbc3,
+ 0x2b36c3,
+ 0x2b3ec3,
+ 0x1621ac2,
+ 0x2b3f83,
+ 0x2b4b03,
+ 0x2920ae42,
+ 0x2cee84,
+ 0x26a746,
+ 0x33c7c3,
+ 0x2b4f83,
+ 0x296b5e02,
+ 0x2b5e08,
+ 0x2b60c4,
+ 0x2470c6,
+ 0x2b6547,
+ 0x24e3c6,
+ 0x295304,
+ 0x37200082,
+ 0x39050b,
+ 0x2ffbce,
+ 0x21bb0f,
+ 0x29da43,
+ 0x37a4ca02,
+ 0x166b142,
+ 0x37e02442,
+ 0x29c243,
+ 0x2472c3,
+ 0x233106,
+ 0x22ff46,
+ 0x212307,
+ 0x31aa84,
+ 0x3821a882,
+ 0x3860ec02,
+ 0x2d4ac5,
+ 0x2e88c7,
+ 0x37e046,
+ 0x38a82882,
+ 0x2f5b04,
+ 0x2b9783,
+ 0x38e01b02,
+ 0x39352883,
+ 0x2ba984,
+ 0x2c06c9,
+ 0x16c6fc2,
+ 0x39642682,
+ 0x351245,
+ 0x39ac7242,
+ 0x39e02682,
+ 0x341687,
+ 0x2364c9,
+ 0x35600b,
+ 0x271405,
+ 0x2c7c89,
+ 0x276a46,
+ 0x2d06c7,
+ 0x3a2092c4,
+ 0x32ef49,
+ 0x374b07,
+ 0x2255c7,
+ 0x234003,
+ 0x37b386,
+ 0x30f887,
+ 0x265383,
+ 0x27c5c6,
+ 0x3aa022c2,
+ 0x3ae31e02,
+ 0x220443,
+ 0x324845,
+ 0x257747,
+ 0x21fac6,
+ 0x2bfa05,
+ 0x230044,
+ 0x2efa45,
+ 0x2f8284,
+ 0x3b205e82,
+ 0x349f07,
+ 0x2e1c44,
+ 0x23e244,
+ 0x33328d,
+ 0x257249,
+ 0x381588,
+ 0x25ac04,
+ 0x314e85,
+ 0x3b2607,
+ 0x205e84,
+ 0x382a47,
+ 0x20c705,
+ 0x3b6aa384,
+ 0x36dec5,
+ 0x267644,
+ 0x24f706,
+ 0x3696c5,
+ 0x3ba24742,
+ 0x369fc4,
+ 0x369fc5,
+ 0x3716c6,
+ 0x2bfb45,
+ 0x25c104,
+ 0x3120c3,
+ 0x204986,
+ 0x22c085,
+ 0x22c785,
+ 0x3697c4,
0x215743,
- 0x2d2f86,
- 0x223f84,
- 0x29b84e,
- 0x360445,
- 0x38b508,
- 0x24bd87,
- 0x24bd8a,
- 0x222a83,
- 0x222a87,
- 0x305445,
- 0x231c84,
- 0x24d886,
- 0x24d887,
- 0x2beb44,
- 0x2f6607,
- 0x377e04,
- 0x3afe84,
- 0x3afe86,
- 0x267544,
- 0x208606,
- 0x210ac3,
- 0x217188,
- 0x21cfc8,
- 0x244703,
- 0x23c303,
- 0x395544,
- 0x39a003,
- 0xce00482,
- 0xd304e82,
- 0x2004c3,
- 0x2072c6,
- 0x369e83,
- 0x263584,
- 0xd616942,
- 0x244c43,
- 0x216943,
- 0x21b182,
- 0xda008c2,
- 0x2b9fc6,
- 0x235fc7,
- 0x2e9345,
- 0x367a44,
- 0x27e045,
- 0x2026c7,
- 0x26a205,
- 0x2c6889,
- 0x2cf2c6,
- 0x2d48c8,
- 0x2e9246,
- 0xde06c02,
- 0x33b648,
- 0x2fe4c6,
- 0x3b1a45,
- 0x3ae4c7,
- 0x301084,
- 0x301085,
- 0x283c04,
- 0x283c08,
- 0xe20cc82,
- 0xe6131c2,
- 0x329cc6,
- 0x318208,
- 0x339345,
- 0x33a3c6,
- 0x33c648,
- 0x35b948,
- 0xeac8945,
- 0xefa8204,
- 0x3aae87,
- 0xf20e802,
- 0xf61dec2,
- 0x10a16582,
- 0x357b85,
- 0x2a3e05,
- 0x2de246,
- 0x319b87,
- 0x399547,
- 0x1122d183,
- 0x29a147,
- 0x2d4488,
- 0x38fec9,
- 0x379987,
- 0x3a5187,
- 0x22fe88,
- 0x230686,
- 0x231786,
- 0x2323cc,
- 0x232f4a,
- 0x233787,
- 0x23518b,
- 0x235e07,
- 0x235e0e,
- 0x236a84,
- 0x2374c4,
- 0x239b07,
- 0x25b087,
- 0x23d9c6,
- 0x23d9c7,
- 0x23e107,
- 0x14600bc2,
- 0x23ec86,
- 0x23ec8a,
- 0x23ef0b,
- 0x240007,
- 0x2407c5,
- 0x240b03,
- 0x240fc6,
- 0x240fc7,
- 0x230a83,
- 0x14a0b382,
- 0x24198a,
- 0x14f54502,
- 0x152a6c02,
- 0x15642b82,
- 0x15a37e42,
- 0x243a85,
- 0x244504,
- 0x16200682,
- 0x364205,
- 0x226b83,
- 0x317c85,
- 0x20a484,
- 0x20ec44,
- 0x291786,
- 0x378106,
- 0x2875c3,
- 0x261f84,
- 0x281e43,
- 0x16600f82,
- 0x200f84,
- 0x3ab406,
- 0x200f85,
- 0x258c06,
- 0x3ae5c8,
- 0x263804,
- 0x2c7848,
- 0x2e0c45,
- 0x22e708,
- 0x32c306,
- 0x2b49c7,
- 0x239504,
- 0x239506,
- 0x307003,
- 0x384083,
- 0x2be608,
- 0x30c584,
- 0x2a0887,
- 0x30a106,
- 0x30a109,
- 0x252448,
- 0x27efc8,
- 0x280444,
- 0x378983,
- 0x22aa02,
- 0x16ab1d82,
- 0x16e2cf42,
- 0x3a1603,
- 0x17219c42,
- 0x24f744,
- 0x3400c6,
- 0x371305,
- 0x23fe83,
- 0x232884,
- 0x300447,
- 0x367783,
- 0x2379c8,
- 0x3af5c5,
- 0x36fc43,
- 0x277705,
+ 0x21574c,
+ 0x3be8d002,
+ 0x3c2045c2,
+ 0x3c605d82,
+ 0x205d83,
+ 0x205d84,
+ 0x3ca032c2,
+ 0x2f9648,
+ 0x35bac5,
+ 0x33f884,
+ 0x230e46,
+ 0x3ce073c2,
+ 0x3d20fc42,
+ 0x3d600c02,
+ 0x321e85,
+ 0x262ec6,
+ 0x20b484,
+ 0x325fc6,
+ 0x3036c6,
+ 0x202983,
+ 0x3db1164a,
+ 0x264785,
+ 0x28b4c3,
+ 0x223886,
+ 0x305e09,
+ 0x223887,
+ 0x293308,
+ 0x29d649,
+ 0x248108,
+ 0x229a46,
+ 0x208843,
+ 0x3de017c2,
+ 0x384b03,
+ 0x384b09,
+ 0x368548,
+ 0x3e2513c2,
+ 0x3e601f02,
+ 0x22d603,
+ 0x2e0405,
+ 0x258f44,
+ 0x35e849,
+ 0x226784,
+ 0x26f288,
+ 0x205c03,
+ 0x2602c4,
+ 0x2784c3,
+ 0x21a788,
+ 0x3331c7,
+ 0x3ea0f302,
+ 0x2432c2,
+ 0x257d85,
+ 0x3960c9,
+ 0x20fbc3,
+ 0x281ac4,
+ 0x328104,
+ 0x219e03,
+ 0x28380a,
+ 0x3ef73102,
+ 0x3f2c0202,
+ 0x2c8883,
+ 0x374fc3,
+ 0x1649202,
+ 0x262a43,
+ 0x3f60bcc2,
+ 0x3fa05f02,
+ 0x3fe22044,
+ 0x222046,
+ 0x33e8c6,
0x277844,
- 0x208306,
- 0x20c804,
- 0x20cf06,
- 0x212306,
- 0x2512c4,
- 0x215683,
- 0x21a883,
- 0x1767e402,
- 0x360fc5,
- 0x215dc3,
- 0x17a00442,
- 0x232383,
- 0x331e85,
- 0x2343c3,
- 0x2343c9,
- 0x17e08042,
- 0x18614b42,
- 0x286b45,
- 0x21ba46,
- 0x29f387,
- 0x2c9786,
- 0x2b83c8,
- 0x2b83cb,
- 0x20730b,
- 0x22aac5,
- 0x2d02c5,
- 0x2bf489,
- 0x1600ec2,
- 0x251488,
- 0x20ce04,
- 0x18e00202,
- 0x24ea03,
- 0x1965b246,
- 0x330e88,
- 0x19a031c2,
- 0x228108,
- 0x19e00d82,
- 0x27008a,
- 0x20f043,
- 0x31d346,
- 0x330448,
- 0x378cc8,
- 0x32f8c6,
- 0x36dd07,
- 0x241f07,
- 0x20de8a,
- 0x2cd784,
- 0x33f184,
- 0x352f49,
- 0x38f8c5,
- 0x2f31c6,
- 0x2138c3,
- 0x247984,
- 0x212104,
- 0x3412c7,
- 0x21e687,
- 0x2d7e84,
- 0x20ddc5,
- 0x2de308,
- 0x35d607,
- 0x360207,
- 0x1a206ac2,
- 0x369684,
- 0x28f388,
- 0x384544,
- 0x2455c4,
- 0x2459c5,
- 0x245b07,
- 0x206ac9,
- 0x246684,
- 0x246e89,
- 0x247348,
- 0x247704,
- 0x247707,
- 0x1a647f83,
- 0x248a47,
- 0x16475c2,
- 0x17a4a82,
- 0x249a06,
- 0x24a4c7,
- 0x24a904,
- 0x24c9c7,
- 0x24e4c7,
- 0x252083,
- 0x23aa82,
- 0x201682,
- 0x252b03,
- 0x252b04,
- 0x252b0b,
- 0x31ce88,
- 0x258b44,
- 0x253805,
- 0x255e47,
- 0x257a05,
- 0x2d9a8a,
- 0x258a83,
- 0x1aa21842,
- 0x258d84,
- 0x25ae49,
- 0x25edc3,
- 0x25ee87,
- 0x3ac249,
- 0x280d08,
- 0x200c83,
- 0x276607,
- 0x276d49,
- 0x202883,
- 0x27d9c4,
- 0x282309,
- 0x2856c6,
- 0x286e03,
- 0x2038c2,
- 0x233e83,
- 0x39b6c7,
- 0x37f785,
- 0x3585c6,
- 0x247b84,
- 0x2d37c5,
- 0x207a03,
- 0x21ac86,
- 0x20d382,
- 0x390e04,
- 0x227982,
- 0x2db883,
- 0x1ae007c2,
- 0x244a43,
- 0x21a544,
- 0x21a547,
- 0x3713c6,
- 0x2499c2,
- 0x1b22d642,
- 0x325e44,
- 0x1b626b02,
- 0x1ba0acc2,
- 0x2d6484,
- 0x2d6485,
- 0x2c3e85,
- 0x341a46,
- 0x1be01e02,
- 0x29fe45,
- 0x2ded05,
- 0x201e03,
- 0x3650c6,
- 0x378445,
- 0x213682,
- 0x33a005,
- 0x213684,
- 0x217c43,
- 0x219343,
- 0x1c20c502,
- 0x28e147,
- 0x35d884,
- 0x35d889,
- 0x247884,
- 0x22b603,
- 0x346449,
- 0x360e88,
- 0x2a3c84,
- 0x2a3c86,
- 0x201f83,
- 0x212883,
- 0x21eb03,
- 0x1c6e1102,
- 0x2e9182,
- 0x1ca0b2c2,
- 0x316b88,
- 0x34afc8,
- 0x394986,
- 0x2549c5,
- 0x21a905,
- 0x306007,
- 0x255805,
- 0x21c2c2,
- 0x1ce61e82,
- 0x1614b82,
- 0x38fa48,
- 0x33b585,
- 0x2c8084,
- 0x2e0b85,
- 0x390507,
- 0x258884,
- 0x23a882,
- 0x1d204c42,
- 0x32c704,
- 0x213507,
- 0x3abd87,
- 0x370a04,
- 0x28ea43,
- 0x244644,
- 0x244648,
- 0x231ac6,
- 0x24d70a,
- 0x206984,
- 0x28edc8,
- 0x253ac4,
- 0x224646,
- 0x290e84,
- 0x357e86,
- 0x35db49,
- 0x259187,
- 0x33a683,
- 0x1d605e82,
- 0x26a843,
- 0x20ff82,
- 0x1da04d42,
- 0x2dfe86,
- 0x35ed48,
- 0x2a5287,
- 0x3a30c9,
- 0x23a4c9,
- 0x2a5c85,
- 0x2a6e49,
- 0x2a7b45,
- 0x2a7c89,
- 0x2a8b85,
- 0x284244,
- 0x1de84247,
- 0x2957c3,
- 0x2a9c07,
- 0x3a5546,
- 0x2aa407,
- 0x2a2945,
- 0x2aba83,
- 0x1e232a02,
- 0x392844,
- 0x1e63a3c2,
- 0x25a183,
- 0x1ea0f1c2,
- 0x2e8b86,
- 0x38df85,
- 0x2acb87,
- 0x324d83,
- 0x250a44,
- 0x206f83,
- 0x20b343,
- 0x1ee082c2,
- 0x1f600042,
- 0x394344,
- 0x23aa43,
- 0x364885,
- 0x25fcc5,
- 0x1fa05602,
- 0x20200942,
- 0x276946,
- 0x209744,
- 0x30c6c4,
- 0x30c6ca,
- 0x20a00a82,
- 0x2f768a,
- 0x372fc8,
- 0x20e01604,
- 0x201d83,
- 0x216c03,
- 0x3209c9,
- 0x223349,
- 0x300546,
- 0x21202243,
- 0x2da985,
- 0x2f81cd,
- 0x202246,
- 0x2065cb,
- 0x21606382,
- 0x333208,
- 0x21a0bf02,
- 0x21e00b42,
- 0x2af285,
- 0x222074c2,
- 0x264c47,
- 0x2a2247,
- 0x2103c3,
- 0x2ae348,
- 0x22601982,
- 0x203a04,
- 0x3786c3,
- 0x332c05,
- 0x3833c3,
- 0x38da46,
- 0x31b204,
- 0x23c2c3,
- 0x26ad83,
- 0x22a095c2,
- 0x22aa44,
- 0x351445,
- 0x36bb47,
- 0x274643,
- 0x2ad803,
- 0x2aed83,
- 0x1621a82,
- 0x2aee43,
- 0x2af643,
- 0x22e04282,
- 0x2f5d44,
- 0x378306,
- 0x204283,
- 0x2af9c3,
- 0x232b09c2,
- 0x2b09c8,
- 0x2b1404,
- 0x25a546,
- 0x2b1847,
- 0x22ba06,
- 0x230d44,
- 0x30e001c2,
- 0x3a540b,
- 0x39fb4e,
- 0x21c80f,
- 0x233383,
- 0x31633e42,
- 0x1604ec2,
- 0x31a02b82,
- 0x227683,
- 0x202b83,
- 0x235c06,
- 0x2aea46,
- 0x27d807,
- 0x34aa44,
- 0x31e1bb82,
- 0x32229e82,
- 0x228e45,
- 0x3a4ac7,
- 0x371b86,
- 0x326436c2,
- 0x2436c4,
- 0x36e203,
- 0x32a09682,
- 0x32f508c3,
- 0x391004,
- 0x2b6b49,
- 0x16bc882,
- 0x33216c82,
- 0x216c85,
- 0x33644802,
- 0x33a00102,
- 0x33e507,
- 0x239049,
- 0x35364b,
- 0x241cc5,
- 0x377609,
- 0x2bcfc6,
- 0x22d0c7,
- 0x33e0c744,
- 0x305ac9,
- 0x35a787,
- 0x201b47,
- 0x209883,
- 0x209886,
- 0x2da2c7,
- 0x206003,
- 0x271e46,
- 0x34605642,
- 0x34a34642,
- 0x21fa43,
- 0x250645,
- 0x222547,
- 0x281b86,
- 0x37f705,
- 0x311244,
- 0x3b1405,
- 0x2e8904,
- 0x34e02102,
- 0x3210c7,
- 0x2d6044,
- 0x223244,
- 0x22324d,
- 0x248809,
- 0x2e0f48,
- 0x22cd04,
- 0x209b05,
- 0x27ee47,
- 0x332784,
- 0x22ef87,
- 0x3a8405,
- 0x353a9084,
- 0x2fa005,
- 0x25da84,
- 0x265d46,
- 0x319985,
- 0x35636b42,
- 0x212e04,
- 0x212e05,
- 0x213206,
- 0x37f845,
- 0x256584,
- 0x2dbc83,
- 0x32fd86,
- 0x220f45,
- 0x225285,
- 0x319a84,
- 0x206a03,
- 0x206a0c,
- 0x35a86002,
- 0x35e01042,
- 0x3620b402,
- 0x332683,
- 0x332684,
- 0x366061c2,
- 0x3a6088,
- 0x358685,
- 0x236604,
- 0x23b9c6,
- 0x36a0a242,
- 0x36e09bc2,
- 0x37200982,
- 0x2d8845,
- 0x251186,
- 0x341204,
- 0x2814c6,
- 0x3340c6,
- 0x203483,
- 0x3772788a,
- 0x23ad85,
+ 0x2474c3,
+ 0x39bc83,
+ 0x235143,
+ 0x242cc6,
+ 0x2ce085,
+ 0x2c8e47,
+ 0x2d0589,
+ 0x2ccac5,
+ 0x2cdfc6,
+ 0x2ce548,
+ 0x2ce746,
+ 0x245bc4,
+ 0x29ef8b,
+ 0x2d3983,
+ 0x2d3985,
+ 0x2d3ac8,
+ 0x226302,
+ 0x341982,
+ 0x4024db02,
+ 0x4060b602,
+ 0x21a8c3,
+ 0x40a73fc2,
+ 0x273fc3,
+ 0x2d3dc4,
+ 0x2d4e43,
+ 0x41201682,
+ 0x41601686,
+ 0x2c47c6,
+ 0x2da008,
+ 0x41a95242,
+ 0x41e10882,
+ 0x42223342,
+ 0x4265e402,
+ 0x42a14202,
+ 0x42e01302,
+ 0x234103,
+ 0x261c05,
+ 0x32d1c6,
+ 0x43213184,
+ 0x295c4a,
+ 0x201306,
+ 0x2f7ec4,
+ 0x269ec3,
+ 0x43e0c002,
+ 0x202082,
+ 0x231743,
+ 0x44204ac3,
+ 0x362b47,
+ 0x3695c7,
+ 0x45a58847,
+ 0x32d747,
+ 0x228543,
+ 0x2977ca,
+ 0x377004,
+ 0x220144,
+ 0x22014a,
+ 0x202085,
+ 0x45e04182,
+ 0x3294c3,
+ 0x462002c2,
+ 0x2104c3,
0x274803,
- 0x225046,
- 0x2efe09,
- 0x225047,
- 0x28bd48,
- 0x293849,
- 0x219888,
- 0x36a346,
- 0x20b203,
- 0x37a9a1c2,
- 0x3856c3,
- 0x3856c9,
- 0x3357c8,
- 0x37e09782,
- 0x38206742,
- 0x2348c3,
- 0x2cf145,
- 0x253304,
- 0x31c8c9,
- 0x25f6c4,
- 0x2b1648,
- 0x206743,
- 0x24f244,
- 0x326b83,
- 0x21ba88,
- 0x223187,
- 0x38643742,
- 0x269d42,
- 0x238c45,
- 0x268849,
- 0x211003,
- 0x278184,
- 0x2da944,
- 0x202c03,
- 0x278cca,
- 0x38b72e82,
- 0x38e12dc2,
- 0x2bdb03,
- 0x3751c3,
- 0x164f202,
- 0x250d03,
- 0x39250042,
- 0x39603042,
- 0x39b07b04,
- 0x366086,
- 0x3469c6,
- 0x276b84,
- 0x25a943,
- 0x27be43,
- 0x2e4983,
- 0x23f286,
- 0x2c2e45,
- 0x2be0c7,
- 0x22cf89,
- 0x2c1d45,
- 0x2c2d86,
- 0x2c3708,
- 0x2c3906,
- 0x238744,
- 0x29718b,
- 0x2c6383,
- 0x2c6385,
- 0x2c64c8,
- 0x21e442,
- 0x33e802,
- 0x39e43b02,
- 0x3a20e842,
- 0x21bbc3,
- 0x3a600e02,
- 0x269fc3,
- 0x2c67c4,
- 0x2c8183,
- 0x3ae25682,
- 0x3b2cc5c6,
- 0x2bb346,
- 0x2ccc08,
- 0x3b6cad42,
- 0x3ba111c2,
- 0x3be19382,
- 0x3c209f82,
- 0x3c614882,
- 0x3ca00ac2,
- 0x228343,
- 0x318d45,
- 0x209c86,
- 0x3ce12444,
- 0x3ab20a,
- 0x310606,
- 0x22ad04,
- 0x27e943,
- 0x3da06bc2,
- 0x205902,
- 0x24dbc3,
- 0x3de38483,
- 0x2ee087,
- 0x319887,
- 0x3f252c07,
- 0x20f007,
- 0x215a43,
- 0x22c6ca,
- 0x240584,
- 0x341504,
- 0x34150a,
- 0x247045,
- 0x3f601642,
- 0x24d483,
- 0x3fa01dc2,
- 0x201f43,
- 0x26a803,
- 0x40201942,
- 0x29a0c4,
- 0x220a84,
- 0x3a36c5,
- 0x2d7205,
- 0x22da06,
- 0x22dd86,
- 0x40608382,
- 0x40a025c2,
- 0x2eb445,
- 0x2bb052,
- 0x29fbc6,
- 0x21ce83,
- 0x2fd346,
- 0x221d85,
- 0x1611342,
- 0x48e0d502,
- 0x2ed8c3,
- 0x212043,
- 0x265603,
- 0x49203382,
- 0x379ac3,
- 0x49602182,
- 0x204a03,
- 0x2f5d88,
- 0x223b43,
- 0x223b46,
- 0x333a07,
- 0x2d84c6,
- 0x2d84cb,
- 0x22ac47,
- 0x392644,
- 0x49e02602,
- 0x3a6505,
- 0x215a03,
- 0x22fd83,
- 0x31aa03,
- 0x31aa06,
- 0x2d038a,
- 0x26d703,
- 0x21d5c4,
- 0x318146,
- 0x3b1e46,
- 0x4a2264c3,
- 0x250907,
- 0x29cf8d,
- 0x39eb87,
- 0x296ec5,
- 0x237806,
- 0x220f83,
- 0x4bb65303,
- 0x4be07a82,
- 0x307604,
- 0x21e3cc,
- 0x35bb89,
- 0x36f307,
- 0x246045,
- 0x255904,
- 0x26ae08,
- 0x274885,
- 0x274a85,
- 0x3612c9,
- 0x335283,
- 0x2a6b84,
- 0x4c206d42,
- 0x206d43,
- 0x4c690942,
- 0x295bc6,
- 0x16b5482,
- 0x4ca95782,
- 0x2d8748,
- 0x2b6d43,
- 0x2f9f47,
- 0x2d7785,
- 0x295785,
- 0x2f6c4b,
- 0x2d1f06,
- 0x2f6e46,
- 0x2f9d06,
- 0x226284,
- 0x2d4ac6,
- 0x2d5048,
- 0x234b03,
- 0x252ec3,
- 0x252ec4,
- 0x2d70c4,
- 0x2d7487,
- 0x2d8185,
- 0x4ced82c2,
- 0x4d206a42,
- 0x209285,
- 0x2990c4,
- 0x2dac8b,
- 0x2dbd48,
- 0x2e6804,
- 0x243702,
- 0x4da80b82,
- 0x2b0c03,
- 0x2dc204,
- 0x2dc4c5,
- 0x272d87,
- 0x2e06c4,
- 0x22ab04,
- 0x4de07442,
- 0x359f49,
- 0x2e1585,
- 0x241f85,
- 0x2e2105,
- 0x4e21bd03,
- 0x2e2f44,
- 0x2e2f4b,
- 0x2e3444,
- 0x2e3ecb,
- 0x2e48c5,
- 0x21c94a,
- 0x2e4f88,
- 0x2e518a,
- 0x2e5a03,
- 0x2e5a0a,
- 0x4e626402,
- 0x4ea41542,
- 0x265903,
- 0x4eee7d82,
- 0x2e7d83,
- 0x4f35d142,
- 0x4f7157c2,
- 0x2e8784,
- 0x21dd86,
- 0x281205,
- 0x2e91c3,
- 0x29ef06,
- 0x21d445,
- 0x21e104,
- 0x4fa08782,
- 0x2ca784,
- 0x2bf10a,
- 0x386847,
- 0x38ddc6,
- 0x2d0847,
- 0x21e503,
- 0x253b48,
- 0x25b5cb,
- 0x300645,
- 0x2b6e85,
- 0x2b6e86,
- 0x225904,
- 0x335b88,
- 0x20b4c3,
- 0x20e204,
- 0x20e207,
- 0x280ec6,
- 0x321746,
- 0x29b68a,
- 0x244fc4,
- 0x244fca,
- 0x2de886,
- 0x2de887,
- 0x253887,
- 0x26f884,
- 0x26f889,
- 0x24b7c5,
- 0x23a30b,
- 0x26ddc3,
- 0x20d0c3,
- 0x21a943,
- 0x231e84,
- 0x4fe04b42,
- 0x254186,
- 0x2ab805,
- 0x2b2dc5,
- 0x3324c6,
- 0x279384,
- 0x502013c2,
- 0x240b44,
- 0x50607982,
- 0x232984,
- 0x227783,
- 0x50a12082,
- 0x349f83,
- 0x24ae86,
- 0x50e01bc2,
- 0x30f108,
- 0x224ec4,
- 0x224ec6,
- 0x305546,
- 0x255f04,
- 0x32fd05,
- 0x3a8108,
- 0x3a8607,
- 0x3b0bc7,
- 0x3b0bcf,
- 0x28f286,
- 0x210d03,
- 0x210d04,
- 0x2251c4,
- 0x229103,
- 0x224784,
- 0x373e44,
- 0x51226442,
- 0x287303,
- 0x390683,
- 0x51617642,
- 0x222a43,
- 0x24f803,
- 0x218e4a,
- 0x23b5c7,
- 0x3a568c,
- 0x3a5946,
- 0x230ac6,
- 0x23a6c7,
- 0x2302c7,
- 0x23e289,
- 0x21f144,
- 0x23ea84,
- 0x51a0a442,
- 0x51e01402,
- 0x29ba46,
- 0x250704,
- 0x376e86,
- 0x230748,
- 0x330cc4,
- 0x264c86,
- 0x2c9745,
- 0x25f008,
- 0x207503,
- 0x266a45,
- 0x269b43,
- 0x242083,
- 0x242084,
- 0x26afc3,
- 0x522e1202,
- 0x52602482,
- 0x26dc89,
- 0x274985,
- 0x283dc4,
- 0x3614c5,
- 0x210804,
- 0x2ed107,
- 0x33fac5,
- 0x252dc4,
- 0x252dc8,
- 0x2d3486,
- 0x2d5204,
- 0x2d5208,
- 0x2d5e87,
- 0x52a015c2,
- 0x2da0c4,
- 0x2d3904,
- 0x201d47,
- 0x52e41384,
- 0x22dc82,
- 0x53201882,
- 0x202b43,
- 0x216b84,
- 0x222903,
- 0x222905,
- 0x5362c082,
- 0x2e9085,
- 0x210fc2,
- 0x376445,
- 0x35ef05,
- 0x53a168c2,
- 0x2168c4,
- 0x53e08d82,
- 0x2c7b06,
- 0x2ac106,
- 0x268988,
- 0x2b7b88,
- 0x2e8b04,
- 0x35e245,
- 0x2f39c9,
- 0x29f484,
- 0x2d0344,
- 0x2513c3,
- 0x5420dfc5,
- 0x374f07,
- 0x2881c4,
- 0x35a90d,
- 0x35b202,
- 0x3858c3,
- 0x39a083,
- 0x54601082,
- 0x3886c5,
- 0x31b447,
- 0x20f0c4,
- 0x20f0c7,
- 0x293a49,
- 0x2bf249,
- 0x214687,
- 0x24fa83,
- 0x2b52c8,
- 0x23dd09,
- 0x2e9947,
- 0x2e9cc5,
- 0x2ea486,
- 0x2eaac6,
- 0x2eac45,
- 0x248905,
- 0x54a01282,
- 0x228685,
- 0x2b9988,
- 0x2a79c6,
- 0x3a1c87,
- 0x2e4b04,
- 0x2ab1c7,
- 0x2edd06,
- 0x54e00242,
- 0x212f06,
- 0x2f004a,
- 0x2f1045,
- 0x552d29c2,
- 0x55638282,
- 0x2da606,
- 0x3574c8,
- 0x55babf47,
- 0x55e00602,
- 0x20a503,
- 0x3b0306,
- 0x30aa04,
- 0x3338c6,
- 0x341746,
- 0x3971ca,
- 0x3a1e05,
- 0x20d586,
- 0x218743,
- 0x218744,
- 0x207282,
- 0x2fe483,
- 0x56253e82,
- 0x2dd843,
- 0x2f7904,
- 0x2dca04,
- 0x35760a,
- 0x245483,
- 0x283b08,
- 0x36a40a,
- 0x278447,
- 0x2f4846,
- 0x2c79c4,
- 0x22abc2,
- 0x200e42,
- 0x56609202,
- 0x244603,
- 0x253647,
- 0x29f1c7,
- 0x38f98b,
- 0x3643c4,
- 0x349447,
- 0x272e86,
- 0x213807,
- 0x2ad204,
- 0x33bb85,
- 0x2a96c5,
- 0x56a10442,
- 0x221a46,
- 0x2259c3,
- 0x226cc2,
- 0x226cc6,
- 0x56e0d942,
- 0x57203e42,
- 0x203e45,
- 0x57624982,
- 0x57a06ec2,
- 0x358845,
- 0x2c0f45,
- 0x20d645,
- 0x264183,
- 0x340185,
- 0x2d1fc7,
- 0x2aa2c5,
- 0x3219c5,
- 0x38b604,
- 0x379bc6,
- 0x243c84,
- 0x57e00cc2,
- 0x276485,
- 0x2a4887,
- 0x377088,
- 0x26a8c6,
- 0x26a8cd,
- 0x270789,
- 0x270792,
- 0x322045,
- 0x326e03,
- 0x58a019c2,
- 0x2e6004,
- 0x2022c3,
- 0x35e145,
- 0x2f2605,
- 0x58e21e42,
- 0x290f03,
- 0x59242d42,
- 0x59694082,
- 0x59a18882,
- 0x346e05,
- 0x2a1003,
- 0x397008,
- 0x59e011c2,
- 0x5a203282,
- 0x29a086,
- 0x27f30a,
- 0x204983,
- 0x256503,
- 0x2f3c43,
- 0x5ae06202,
- 0x692033c2,
- 0x69a04cc2,
- 0x203dc2,
- 0x38bd09,
- 0x2bbcc4,
- 0x2ae648,
- 0x69ee9202,
- 0x6a205882,
- 0x2e4105,
- 0x2355c8,
- 0x247d88,
- 0x2f334c,
- 0x23a183,
- 0x25d442,
- 0x6a62d742,
- 0x2c21c6,
- 0x2f56c5,
- 0x30f5c3,
- 0x3903c6,
- 0x2f5806,
- 0x22fc43,
- 0x2f6a03,
- 0x2f6fc6,
- 0x2f7d84,
- 0x270186,
- 0x2c6545,
- 0x2f800a,
- 0x23d184,
- 0x2f8d84,
- 0x34b94a,
- 0x6aa6cd42,
- 0x347a45,
- 0x2fa44a,
- 0x2fb885,
- 0x2fc404,
- 0x2fc506,
- 0x2fc684,
- 0x366dc6,
- 0x6ae00282,
- 0x38d706,
- 0x38e7c5,
- 0x204707,
- 0x239f46,
- 0x22d584,
- 0x22d587,
- 0x3277c6,
- 0x212f45,
- 0x2c6c87,
- 0x39ae07,
- 0x39ae0e,
- 0x223ec6,
- 0x22ee45,
- 0x279a07,
- 0x2deb83,
- 0x2deb87,
- 0x3a8a05,
- 0x211204,
- 0x2120c2,
- 0x37a547,
- 0x34aac4,
- 0x2ae9c4,
- 0x269bcb,
- 0x2201c3,
- 0x2c3a47,
- 0x2201c4,
- 0x2ce307,
- 0x238943,
- 0x32914d,
- 0x388f08,
- 0x252cc4,
- 0x252cc5,
- 0x2fca45,
- 0x2fd003,
- 0x6b224dc2,
- 0x2fe443,
- 0x2fea03,
- 0x365c44,
- 0x276e45,
- 0x2193c7,
- 0x2187c6,
- 0x372f83,
- 0x226e0b,
- 0x29d34b,
- 0x267c4b,
- 0x276f4a,
- 0x2a734b,
- 0x2cae0b,
- 0x2d2a0c,
- 0x2d5711,
- 0x33d90a,
- 0x34e1cb,
- 0x37bd0b,
- 0x3ae28a,
- 0x3b2eca,
- 0x2ff60d,
- 0x300d4e,
- 0x301b4b,
- 0x301e0a,
- 0x302d51,
- 0x30318a,
- 0x30368b,
- 0x303bce,
- 0x30450c,
- 0x30498b,
- 0x304c4e,
- 0x304fcc,
- 0x3087ca,
- 0x3098cc,
- 0x6b709bca,
- 0x30adc9,
- 0x30c94a,
- 0x30cbca,
- 0x30ce4b,
- 0x312f8e,
- 0x313311,
- 0x31bcc9,
- 0x31bf0a,
- 0x31cb0b,
- 0x31e2ca,
- 0x31ee56,
- 0x32060b,
- 0x321e0a,
- 0x32220a,
- 0x32424b,
- 0x326889,
- 0x329ac9,
- 0x32ae0d,
- 0x32c48b,
- 0x32d60b,
- 0x32dfcb,
- 0x32e449,
- 0x32ea8e,
- 0x32efca,
- 0x335e4a,
- 0x33648a,
- 0x336e4b,
- 0x33768b,
- 0x33794d,
- 0x33904d,
- 0x339c90,
- 0x33a14b,
- 0x33ac8c,
- 0x33c3cb,
- 0x33e00b,
- 0x33f64b,
- 0x34490b,
- 0x34538f,
- 0x34574b,
- 0x34600a,
- 0x346709,
- 0x346b49,
- 0x34808b,
- 0x34834e,
- 0x34bfcb,
- 0x34cd8f,
- 0x34ed8b,
- 0x34f04b,
- 0x34f30b,
- 0x34f74a,
- 0x353249,
- 0x35624f,
- 0x35ce4c,
- 0x35d34c,
- 0x35de0e,
- 0x35e48f,
- 0x35e84e,
- 0x35fa90,
- 0x35fe8f,
- 0x3608ce,
- 0x3617cc,
- 0x361ad2,
- 0x36b751,
- 0x36bd0e,
- 0x36c14e,
+ 0x46a00842,
+ 0x2e33c4,
+ 0x21db44,
+ 0x208285,
+ 0x30bd05,
+ 0x249406,
+ 0x249786,
+ 0x46e09282,
+ 0x47201002,
+ 0x3274c5,
+ 0x2c44d2,
+ 0x271ac6,
+ 0x248803,
+ 0x2a2486,
+ 0x248805,
+ 0x1610a02,
+ 0x4f611802,
+ 0x3522c3,
+ 0x211803,
+ 0x278203,
+ 0x4fa11f82,
+ 0x378ac3,
+ 0x4fe14602,
+ 0x200a83,
+ 0x2ceec8,
+ 0x24a843,
+ 0x24a846,
+ 0x3a1087,
+ 0x321b06,
+ 0x321b0b,
+ 0x2f7e07,
+ 0x392404,
+ 0x50603ec2,
+ 0x364805,
+ 0x50a04a83,
+ 0x239f83,
+ 0x326805,
+ 0x35b5c3,
+ 0x35b5c6,
+ 0x26334a,
+ 0x2774c3,
+ 0x23ad04,
+ 0x2c2806,
+ 0x20df46,
+ 0x50e00383,
+ 0x324b07,
+ 0x28bb8d,
+ 0x3adbc7,
+ 0x2a0685,
+ 0x250b46,
+ 0x22c0c3,
+ 0x52a15e43,
+ 0x52e04c82,
+ 0x3b2804,
+ 0x236d8c,
+ 0x245309,
+ 0x24bcc7,
+ 0x3724c5,
+ 0x268d84,
+ 0x27c1c8,
+ 0x27ed05,
+ 0x5328a405,
+ 0x377c09,
+ 0x256343,
+ 0x2acd44,
+ 0x53617902,
+ 0x21aac3,
+ 0x53a99f82,
+ 0x2a3fc6,
+ 0x16aa082,
+ 0x53e943c2,
+ 0x321d88,
+ 0x2c08c3,
+ 0x36de07,
+ 0x305105,
+ 0x2943c5,
+ 0x30860b,
+ 0x2e3906,
+ 0x308806,
+ 0x36dbc6,
+ 0x268f84,
+ 0x2e5686,
+ 0x2e5b48,
+ 0x23e943,
+ 0x23cf83,
+ 0x23cf84,
+ 0x2e6984,
+ 0x2e6e07,
+ 0x2e8745,
+ 0x542e8882,
+ 0x54606ec2,
+ 0x206ec5,
+ 0x2a4a84,
+ 0x2ebf8b,
+ 0x2ee248,
+ 0x2f7304,
+ 0x290602,
+ 0x54eb6042,
+ 0x38c543,
+ 0x2ee704,
+ 0x2ee9c5,
+ 0x2ef087,
+ 0x2f1404,
+ 0x2f7cc4,
+ 0x552054c2,
+ 0x35d209,
+ 0x2f2445,
+ 0x2716c5,
+ 0x2f3105,
+ 0x5561aa03,
+ 0x2f4244,
+ 0x2f424b,
+ 0x2f4684,
+ 0x2f4b0b,
+ 0x2f5505,
+ 0x21bc4a,
+ 0x2f5d08,
+ 0x2f5f0a,
+ 0x2f6783,
+ 0x2f678a,
+ 0x55a1b282,
+ 0x55e01202,
+ 0x26a103,
+ 0x562f7902,
+ 0x2f7903,
+ 0x5673aa42,
+ 0x56b21202,
+ 0x2f8104,
+ 0x21c2c6,
+ 0x325d05,
+ 0x2f8b43,
+ 0x32ff46,
+ 0x30c845,
+ 0x2e9784,
+ 0x56e00e02,
+ 0x2d7904,
+ 0x2c9c4a,
+ 0x2eb487,
+ 0x26b686,
+ 0x244007,
+ 0x236ec3,
+ 0x265488,
+ 0x28954b,
+ 0x386a45,
+ 0x235905,
+ 0x235906,
+ 0x370204,
+ 0x31d488,
+ 0x215a83,
+ 0x2b5984,
+ 0x36b507,
+ 0x307206,
+ 0x200e06,
+ 0x2a58ca,
+ 0x24e684,
+ 0x24e68a,
+ 0x57201946,
+ 0x201947,
+ 0x259547,
+ 0x279804,
+ 0x279809,
+ 0x2ba485,
+ 0x23b80b,
+ 0x2769c3,
+ 0x211c03,
+ 0x2a3f43,
+ 0x22ec44,
+ 0x57600682,
+ 0x259f06,
+ 0x2a7d05,
+ 0x2a26c5,
+ 0x2564c6,
+ 0x2531c4,
+ 0x57a01f82,
+ 0x245244,
+ 0x57e00d42,
+ 0x200d44,
+ 0x224303,
+ 0x58211842,
+ 0x3398c3,
+ 0x2478c6,
+ 0x58602602,
+ 0x2cfb88,
+ 0x223704,
+ 0x223706,
+ 0x375846,
+ 0x25bb44,
+ 0x204905,
+ 0x20c408,
+ 0x20c907,
+ 0x20d007,
+ 0x20d00f,
+ 0x298bc6,
+ 0x227843,
+ 0x227844,
+ 0x28be84,
+ 0x210e83,
+ 0x222c84,
+ 0x241104,
+ 0x58a36b82,
+ 0x28e183,
+ 0x241383,
+ 0x58e0c4c2,
+ 0x22a543,
+ 0x260883,
+ 0x213e8a,
+ 0x22bc87,
+ 0x241c8c,
+ 0x241f46,
+ 0x242406,
+ 0x246dc7,
+ 0x592ddb07,
+ 0x251a09,
+ 0x21cc04,
+ 0x252284,
+ 0x59609f42,
+ 0x59a01702,
+ 0x2a5c86,
+ 0x324904,
+ 0x2db5c6,
+ 0x2ab348,
+ 0x20eec4,
+ 0x2a3186,
+ 0x2d68c5,
+ 0x26ebc8,
+ 0x205583,
+ 0x272605,
+ 0x273583,
+ 0x2717c3,
+ 0x2717c4,
+ 0x273983,
+ 0x59edeec2,
+ 0x5a200b42,
+ 0x276889,
+ 0x27ec05,
+ 0x27ee04,
+ 0x281305,
+ 0x212504,
+ 0x2c1247,
+ 0x33d3c5,
+ 0x258a04,
+ 0x258a08,
+ 0x2dc3c6,
+ 0x2de404,
+ 0x2dfdc8,
+ 0x2e1a87,
+ 0x5a60e5c2,
+ 0x305304,
+ 0x210f44,
+ 0x2257c7,
+ 0x5aa53d84,
+ 0x249682,
+ 0x5ae01ac2,
+ 0x21b083,
+ 0x351144,
+ 0x242643,
+ 0x33d945,
+ 0x5b21de42,
+ 0x2ebb05,
+ 0x212bc2,
+ 0x381dc5,
+ 0x364305,
+ 0x5b60c842,
+ 0x3581c4,
+ 0x5ba06342,
+ 0x2a9146,
+ 0x2ac506,
+ 0x396208,
+ 0x2c3608,
+ 0x3075c4,
+ 0x2f8905,
+ 0x2fe809,
+ 0x2e10c4,
+ 0x263304,
+ 0x20aec3,
+ 0x5be20c45,
+ 0x2c7087,
+ 0x25e944,
+ 0x33a48d,
+ 0x33c282,
+ 0x33c283,
+ 0x355783,
+ 0x5c200202,
+ 0x388b45,
+ 0x26c747,
+ 0x2a7e04,
+ 0x32d807,
+ 0x29d849,
+ 0x2c9d89,
+ 0x248ac7,
+ 0x243843,
+ 0x27c008,
+ 0x2f33c9,
+ 0x2500c7,
+ 0x370145,
+ 0x385886,
+ 0x394246,
+ 0x3959c5,
+ 0x257345,
+ 0x5c603102,
+ 0x27eb05,
+ 0x2b8308,
+ 0x2c5386,
+ 0x2bcc07,
+ 0x2f5744,
+ 0x2ad207,
+ 0x2faf46,
+ 0x5ca2fb02,
+ 0x3713c6,
+ 0x2fd38a,
+ 0x2fde45,
+ 0x5cee4742,
+ 0x5d245702,
+ 0x30fbc6,
+ 0x2b25c8,
+ 0x5d68eb87,
+ 0x5da04602,
+ 0x20edc3,
+ 0x38c706,
+ 0x2246c4,
+ 0x3a0f46,
+ 0x262446,
+ 0x26bd0a,
+ 0x319a45,
+ 0x204446,
+ 0x218c83,
+ 0x218c84,
+ 0x205302,
+ 0x30c283,
+ 0x5de05dc2,
+ 0x2ce903,
+ 0x3734c4,
+ 0x2b2704,
+ 0x2b270a,
+ 0x229b03,
+ 0x28a7c8,
+ 0x229b0a,
+ 0x23a407,
+ 0x301446,
+ 0x2a9004,
+ 0x296e42,
+ 0x219542,
+ 0x5e206e42,
+ 0x24e1c3,
+ 0x259307,
+ 0x330207,
+ 0x38fd4b,
+ 0x28a2c4,
+ 0x34f9c7,
+ 0x2ef186,
+ 0x21c607,
+ 0x258004,
+ 0x23c445,
+ 0x2c17c5,
+ 0x5e620382,
+ 0x221a86,
+ 0x246043,
+ 0x24a2c2,
+ 0x24a2c6,
+ 0x5ea04802,
+ 0x5ee05bc2,
+ 0x3abd45,
+ 0x5f222e82,
+ 0x5f600a42,
+ 0x343745,
+ 0x38e6c5,
+ 0x204505,
+ 0x270ac3,
+ 0x390b05,
+ 0x2e39c7,
+ 0x309445,
+ 0x30a985,
+ 0x3a05c4,
+ 0x24c646,
+ 0x25c1c4,
+ 0x5fa03382,
+ 0x6060ce05,
+ 0x36f447,
+ 0x2db7c8,
+ 0x2a32c6,
+ 0x2a32cd,
+ 0x2a86c9,
+ 0x2a86d2,
+ 0x332705,
+ 0x33c843,
+ 0x60a044c2,
+ 0x2f6d84,
+ 0x204383,
+ 0x3623c5,
+ 0x2fed85,
+ 0x60e17082,
+ 0x3700c3,
+ 0x6124d082,
+ 0x616c3142,
+ 0x61a18dc2,
+ 0x364c05,
+ 0x329ec3,
+ 0x319888,
+ 0x61e02d82,
+ 0x62206902,
+ 0x2e3386,
+ 0x34398a,
+ 0x272243,
+ 0x25c083,
+ 0x2ed703,
+ 0x62e016c2,
+ 0x71211fc2,
+ 0x71a19682,
+ 0x206602,
+ 0x3711c9,
+ 0x2c6404,
+ 0x22fb48,
+ 0x71ef8b82,
+ 0x72202502,
+ 0x2f4d45,
+ 0x232ac8,
+ 0x2cf008,
+ 0x2fd54c,
+ 0x23bd83,
+ 0x267002,
+ 0x726019c2,
+ 0x2ccf46,
+ 0x3022c5,
+ 0x239103,
+ 0x383586,
+ 0x302406,
+ 0x21e2c3,
+ 0x304ec3,
+ 0x3055c6,
+ 0x306204,
+ 0x225d46,
+ 0x2d3b45,
+ 0x30648a,
+ 0x240544,
+ 0x307884,
+ 0x307a4a,
+ 0x72a037c2,
+ 0x234605,
+ 0x30898a,
+ 0x309a85,
+ 0x30a344,
+ 0x30a446,
+ 0x30a5c4,
+ 0x228306,
+ 0x72e39342,
+ 0x2eadc6,
+ 0x3a2445,
+ 0x26bb87,
+ 0x3a3c46,
+ 0x246fc4,
+ 0x2da807,
+ 0x311586,
+ 0x25b5c5,
+ 0x2d4287,
+ 0x39cd87,
+ 0x39cd8e,
+ 0x24abc6,
+ 0x382905,
+ 0x285407,
+ 0x201c43,
+ 0x201c47,
+ 0x3b3445,
+ 0x2108c4,
+ 0x211882,
+ 0x22afc7,
+ 0x31ab04,
+ 0x22fec4,
+ 0x24314b,
+ 0x21d283,
+ 0x288fc7,
+ 0x21d284,
+ 0x2ace07,
+ 0x2824c3,
+ 0x334b4d,
+ 0x389388,
+ 0x228e04,
+ 0x258905,
+ 0x30ac85,
+ 0x30b0c3,
+ 0x73201a82,
+ 0x30c243,
+ 0x30cf43,
+ 0x221c04,
+ 0x280785,
+ 0x223387,
+ 0x218d06,
+ 0x373203,
+ 0x24a40b,
+ 0x3aa70b,
+ 0x27928b,
+ 0x28088a,
+ 0x2ad8cb,
+ 0x2fc28b,
+ 0x2e478c,
+ 0x2e7291,
+ 0x32170a,
+ 0x34e48b,
+ 0x379d0b,
+ 0x3b048a,
+ 0x3b4cca,
+ 0x30ea4d,
+ 0x31038e,
+ 0x3109cb,
+ 0x310c8a,
+ 0x312191,
+ 0x3125ca,
+ 0x312acb,
+ 0x31300e,
+ 0x31398c,
+ 0x313fcb,
+ 0x31428e,
+ 0x31460c,
+ 0x315a4a,
+ 0x31694c,
+ 0x73716c4a,
+ 0x317449,
+ 0x31b60a,
+ 0x31b88a,
+ 0x31bb0b,
+ 0x31e9ce,
+ 0x31ed51,
+ 0x327a09,
+ 0x327c4a,
+ 0x32844b,
+ 0x32a30a,
+ 0x32ab96,
+ 0x32c8cb,
+ 0x32e00a,
+ 0x32e5ca,
+ 0x33048b,
+ 0x332189,
+ 0x3354c9,
+ 0x335a4d,
+ 0x3360cb,
+ 0x33734b,
+ 0x337d0b,
+ 0x3381c9,
+ 0x33880e,
+ 0x338f0a,
+ 0x33a24a,
+ 0x33a7ca,
+ 0x33af8b,
+ 0x33b7cb,
+ 0x33ba8d,
+ 0x33cecd,
+ 0x33da90,
+ 0x33df4b,
+ 0x33e54c,
+ 0x33ea4b,
+ 0x34118b,
+ 0x34290b,
+ 0x3463cb,
+ 0x346e4f,
+ 0x34720b,
+ 0x347d0a,
+ 0x348249,
+ 0x348609,
+ 0x34898b,
+ 0x348c4e,
+ 0x34b98b,
+ 0x34d04f,
+ 0x34ff0b,
+ 0x3501cb,
+ 0x35048b,
+ 0x35098a,
+ 0x355c09,
+ 0x35a20f,
+ 0x36128c,
+ 0x36170c,
+ 0x36208e,
+ 0x36388f,
+ 0x363c4e,
+ 0x3652d0,
+ 0x3656cf,
+ 0x365d4e,
+ 0x36650c,
+ 0x366812,
+ 0x36a511,
+ 0x36ad0e,
+ 0x36ba0e,
+ 0x36bf4e,
+ 0x36c2cf,
0x36c68e,
- 0x36ca0f,
- 0x36cdce,
- 0x36d153,
- 0x36d611,
- 0x36da4e,
- 0x36decc,
- 0x36e2d3,
- 0x36f650,
- 0x36ff0c,
- 0x37020c,
- 0x3706cb,
- 0x37168e,
+ 0x36ca13,
+ 0x36ced1,
+ 0x36d30e,
+ 0x36d78c,
+ 0x36e493,
+ 0x36fa90,
+ 0x37070c,
+ 0x370a0c,
+ 0x370ecb,
+ 0x37184e,
0x371f8b,
- 0x3723cb,
- 0x373b0c,
- 0x37acca,
- 0x37b50c,
- 0x37b80c,
- 0x37bb09,
- 0x37cf0b,
- 0x37d1c8,
- 0x37d3c9,
- 0x37d3cf,
- 0x37ed0b,
- 0x37fa0a,
- 0x380fcc,
- 0x382e49,
- 0x383208,
- 0x38374b,
- 0x383e4b,
- 0x384c8a,
- 0x384f0b,
- 0x38544c,
- 0x385e08,
- 0x38910b,
- 0x38ba0b,
- 0x38fc4b,
- 0x391a4b,
- 0x39a98b,
- 0x39ac49,
- 0x39b18d,
- 0x3a004a,
- 0x3a0f97,
- 0x3a2898,
- 0x3a5bc9,
+ 0x3727cb,
+ 0x37378c,
+ 0x37914a,
+ 0x37950c,
+ 0x37980c,
+ 0x379b09,
+ 0x37b7cb,
+ 0x37ba88,
+ 0x37bc89,
+ 0x37bc8f,
+ 0x37d5cb,
+ 0x37e44a,
+ 0x37fd4c,
+ 0x380e09,
+ 0x381b88,
+ 0x38214b,
+ 0x382c0b,
+ 0x38418a,
+ 0x38440b,
+ 0x38488c,
+ 0x385548,
+ 0x38958b,
+ 0x38c04b,
+ 0x39000b,
+ 0x39180b,
+ 0x39c90b,
+ 0x39cbc9,
+ 0x39d10d,
+ 0x3a264a,
+ 0x3a3597,
+ 0x3a3dd8,
+ 0x3a6309,
0x3a7b4b,
- 0x3a9414,
- 0x3a990b,
- 0x3a9e8a,
- 0x3aa30a,
- 0x3aa58b,
- 0x3ab590,
- 0x3ab991,
- 0x3ac48a,
- 0x3ad88d,
- 0x3adf8d,
- 0x3b328b,
- 0x3b4506,
- 0x221b43,
- 0x6bb99283,
- 0x323dc6,
- 0x28b6c5,
- 0x2c55c7,
- 0x33d7c6,
- 0x1617982,
- 0x2b0d49,
- 0x29ed04,
- 0x2cfe48,
- 0x242743,
- 0x2e5f47,
- 0x230902,
- 0x2acbc3,
- 0x6be006c2,
- 0x2c0586,
- 0x2c17c4,
- 0x307c84,
- 0x236c43,
- 0x236c45,
- 0x6c6ff382,
- 0x6caa8004,
- 0x26f7c7,
- 0x16ce2c2,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x2025c3,
- 0x200882,
- 0x880c8,
- 0x216582,
- 0x21eb03,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x217643,
- 0x317416,
- 0x31a5d3,
- 0x3492c9,
- 0x3aad88,
- 0x3a6389,
- 0x2fa5c6,
- 0x32c750,
- 0x21d6d3,
- 0x200b08,
- 0x25aa47,
- 0x274ec7,
- 0x29cb4a,
- 0x2f7989,
- 0x3336c9,
- 0x28a70b,
- 0x325506,
- 0x31cf8a,
- 0x223586,
- 0x29e903,
- 0x28e085,
- 0x217188,
- 0x2c7bcd,
- 0x357c4c,
- 0x38e487,
- 0x3025cd,
- 0x3a8204,
- 0x23214a,
- 0x232a8a,
- 0x232f4a,
- 0x21d9c7,
- 0x23cfc7,
- 0x23f644,
- 0x239506,
- 0x3258c4,
- 0x2ec848,
- 0x25f709,
- 0x2b83c6,
- 0x2b83c8,
- 0x2423cd,
- 0x2bf489,
- 0x378cc8,
- 0x241f07,
- 0x2fe78a,
- 0x24a4c6,
- 0x25a047,
- 0x2cdac4,
- 0x240d07,
- 0x30130a,
- 0x3397ce,
- 0x255805,
- 0x2fcd4b,
- 0x277a09,
- 0x223349,
- 0x2a2087,
- 0x358b0a,
- 0x201c87,
- 0x39fc89,
- 0x358108,
- 0x369c4b,
- 0x2cf145,
- 0x2e0e0a,
- 0x2a37c9,
- 0x30f54a,
- 0x2c1dcb,
- 0x240c0b,
- 0x28a495,
- 0x2d5d45,
- 0x241f85,
- 0x2e2f4a,
- 0x215cca,
- 0x310c47,
- 0x220683,
- 0x29b9c8,
- 0x2cb14a,
- 0x224ec6,
- 0x23db49,
- 0x25f008,
- 0x2d5204,
- 0x22fb09,
- 0x2b7b88,
- 0x32c247,
- 0x276486,
- 0x2a4887,
- 0x28fd87,
- 0x23f085,
- 0x25564c,
- 0x252cc5,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x216582,
- 0x22d183,
- 0x238483,
- 0x2025c3,
- 0x2264c3,
- 0x22d183,
- 0x238483,
- 0x223b43,
- 0x2264c3,
- 0x880c8,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x880c8,
- 0x216582,
- 0x201a42,
- 0x233182,
- 0x201982,
- 0x204c02,
- 0x293d42,
- 0x462d183,
- 0x2343c3,
- 0x211cc3,
- 0x21eb03,
- 0x202243,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x20b443,
- 0x880c8,
- 0x335d44,
- 0x24f007,
- 0x251fc3,
- 0x231404,
- 0x214bc3,
- 0x282343,
- 0x21eb03,
- 0x16e747,
- 0x200882,
- 0x123ac3,
- 0x5a16582,
- 0x86a0d,
- 0x233182,
- 0x1604,
- 0x201502,
- 0x5e01508,
- 0xe26c4,
- 0x880c8,
- 0x140de82,
- 0x14fa2c6,
- 0x230983,
- 0x316403,
- 0x662d183,
- 0x232144,
- 0x6a343c3,
- 0x6e1eb03,
- 0x2082c2,
- 0x201604,
- 0x238483,
- 0x212ec3,
- 0x202282,
- 0x2264c3,
- 0x21ed42,
- 0x2e86c3,
- 0x201bc2,
- 0x29c743,
- 0x22d743,
- 0x204702,
- 0x880c8,
- 0x230983,
- 0x212ec3,
- 0x202282,
- 0x2e86c3,
- 0x201bc2,
- 0x29c743,
- 0x22d743,
- 0x204702,
- 0x2e86c3,
- 0x201bc2,
- 0x29c743,
- 0x22d743,
- 0x204702,
- 0x22d183,
- 0x323ac3,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x201604,
- 0x202243,
- 0x211003,
- 0x212444,
- 0x238483,
- 0x2264c3,
- 0x202002,
- 0x21bd03,
- 0x880c8,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x323ac3,
- 0x216582,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x201604,
- 0x238483,
- 0x2264c3,
- 0x2e9cc5,
- 0x221e42,
- 0x200882,
- 0x880c8,
- 0x1462d48,
- 0x21eb03,
- 0x225b41,
- 0x20fd41,
- 0x20c401,
- 0x20c041,
- 0x226fc1,
- 0x26f541,
- 0x252041,
- 0x225c41,
- 0x2d5901,
- 0x2ff8c1,
+ 0x3a9554,
+ 0x3a9a4b,
+ 0x3a9fca,
+ 0x3ab70a,
+ 0x3ab98b,
+ 0x3ad110,
+ 0x3ad511,
+ 0x3ae64a,
+ 0x3afa8d,
+ 0x3b018d,
+ 0x3b508b,
+ 0x3b5c46,
+ 0x221b83,
+ 0x73b76c03,
+ 0x37f706,
+ 0x292c85,
+ 0x396787,
+ 0x3215c6,
+ 0x1639f02,
+ 0x2b3809,
+ 0x32fd44,
+ 0x2e0bc8,
+ 0x24e103,
+ 0x2f6cc7,
+ 0x241b82,
+ 0x2b2c03,
+ 0x73e06c82,
+ 0x2cb006,
+ 0x2cc544,
+ 0x3b2e84,
+ 0x2616c3,
+ 0x2616c5,
+ 0x746c7282,
+ 0x74aae504,
+ 0x279747,
+ 0x1669e02,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x20abc3,
+ 0x204cc2,
+ 0x15f048,
+ 0x20d1c2,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x213e83,
+ 0x324156,
+ 0x325393,
+ 0x34f849,
+ 0x2957c8,
+ 0x364689,
+ 0x308b06,
+ 0x336f50,
+ 0x25c9d3,
+ 0x3072c8,
+ 0x344207,
+ 0x27e407,
+ 0x2475ca,
+ 0x373549,
+ 0x239789,
+ 0x29258b,
+ 0x367e06,
+ 0x314aca,
+ 0x2221c6,
+ 0x32f943,
+ 0x294985,
+ 0x22b888,
+ 0x2a920d,
+ 0x35ab0c,
+ 0x3a2107,
+ 0x379f8d,
+ 0x20c504,
+ 0x22ef0a,
+ 0x23064a,
+ 0x230b0a,
+ 0x20fe87,
+ 0x240387,
+ 0x243084,
+ 0x26cdc6,
+ 0x3aab84,
+ 0x2e26c8,
+ 0x2267c9,
+ 0x2b94c6,
+ 0x2b94c8,
+ 0x24c34d,
+ 0x2c9fc9,
+ 0x207d48,
+ 0x271647,
+ 0x2f8e8a,
+ 0x2539c6,
+ 0x2642c7,
+ 0x2c96c4,
+ 0x28e807,
+ 0x332eca,
+ 0x36f5ce,
+ 0x228fc5,
+ 0x28e70b,
+ 0x262089,
+ 0x2a8909,
+ 0x2129c7,
+ 0x29998a,
+ 0x225707,
+ 0x2ffd09,
+ 0x326b48,
+ 0x35dc4b,
+ 0x2e0405,
+ 0x38144a,
+ 0x223109,
+ 0x23908a,
+ 0x2ccb4b,
+ 0x383a0b,
+ 0x292315,
+ 0x2e6185,
+ 0x2716c5,
+ 0x2f424a,
+ 0x25980a,
+ 0x261e07,
+ 0x21d743,
+ 0x2a5c08,
+ 0x2d828a,
+ 0x223706,
+ 0x24ff09,
+ 0x26ebc8,
+ 0x2de404,
+ 0x242649,
+ 0x2c3608,
+ 0x2b1c07,
+ 0x20ce06,
+ 0x36f447,
+ 0x293cc7,
+ 0x242ac5,
+ 0x228e0c,
+ 0x258905,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x204ac3,
+ 0x20abc3,
+ 0x200383,
+ 0x2d0783,
+ 0x204ac3,
+ 0x24a843,
+ 0x200383,
+ 0x15f048,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x15f048,
+ 0x20d1c2,
+ 0x2000c2,
+ 0x230d42,
+ 0x202f02,
+ 0x202382,
+ 0x261e82,
+ 0x46d0783,
+ 0x231b83,
+ 0x2135c3,
+ 0x332ec3,
+ 0x204303,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x201383,
+ 0x15f048,
+ 0x32df04,
+ 0x260087,
+ 0x263d43,
+ 0x37aa84,
+ 0x214543,
+ 0x212a43,
+ 0x332ec3,
+ 0x13ecc7,
+ 0x204cc2,
+ 0x168883,
+ 0x5a0d1c2,
+ 0x8d54d,
+ 0x8d88d,
+ 0x230d42,
+ 0x964c4,
+ 0x200382,
+ 0x5e963c8,
+ 0xf39c4,
+ 0x15f048,
+ 0x14020c2,
+ 0x1509cc6,
+ 0x20e443,
+ 0x26ae03,
+ 0x66d0783,
+ 0x22ef04,
+ 0x6a31b83,
+ 0x6f32ec3,
+ 0x20a3c2,
+ 0x2964c4,
+ 0x204ac3,
+ 0x2fc883,
+ 0x201882,
+ 0x200383,
+ 0x21c802,
+ 0x2f8043,
+ 0x202602,
+ 0x203f83,
+ 0x26ec83,
+ 0x206d02,
+ 0x15f048,
+ 0x20e443,
+ 0x2fc883,
+ 0x201882,
+ 0x2f8043,
+ 0x202602,
+ 0x203f83,
+ 0x26ec83,
+ 0x206d02,
+ 0x2f8043,
+ 0x202602,
+ 0x203f83,
+ 0x26ec83,
+ 0x206d02,
+ 0x2d0783,
+ 0x368883,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x2964c4,
+ 0x204303,
+ 0x20fbc3,
+ 0x213184,
+ 0x204ac3,
+ 0x200383,
+ 0x210582,
+ 0x21aa03,
+ 0x15f048,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x368883,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x2964c4,
+ 0x204ac3,
+ 0x200383,
+ 0x370145,
+ 0x217082,
+ 0x204cc2,
+ 0x15f048,
+ 0x1491b48,
+ 0x332ec3,
+ 0x2461c1,
+ 0x2096c1,
+ 0x202201,
+ 0x209441,
+ 0x24a5c1,
+ 0x27e081,
+ 0x24c0c1,
+ 0x2462c1,
+ 0x2e7481,
+ 0x30ed01,
0x200141,
0x200001,
- 0x880c8,
- 0x200481,
- 0x200741,
- 0x200081,
- 0x200c81,
- 0x2007c1,
- 0x200901,
- 0x200041,
- 0x204281,
- 0x2001c1,
+ 0x15f048,
+ 0x200701,
+ 0x200101,
0x2000c1,
- 0x200341,
- 0x200ac1,
- 0x201501,
- 0x2014c1,
- 0x204101,
- 0x200b81,
+ 0x201e41,
+ 0x200181,
+ 0x200941,
+ 0x200041,
+ 0x204ec1,
+ 0x200081,
+ 0x201481,
+ 0x200c01,
+ 0x2002c1,
+ 0x200381,
+ 0x200e81,
+ 0x21c2c1,
+ 0x2003c1,
+ 0x200201,
0x200241,
0x200a01,
- 0x2002c1,
- 0x200281,
- 0x204701,
- 0x20dec1,
- 0x200781,
- 0x200641,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x216582,
- 0x22d183,
- 0x2343c3,
- 0x201502,
- 0x2264c3,
- 0x16e747,
- 0x131ac7,
- 0x1e1c6,
- 0x1736ca,
- 0x85c48,
- 0x53188,
- 0x53547,
- 0x50d06,
- 0xce6c5,
- 0x51f05,
- 0x161186,
- 0x155646,
- 0x224104,
- 0x322707,
- 0x880c8,
- 0x22d684,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x22d183,
- 0x2343c3,
- 0x211cc3,
- 0x21eb03,
- 0x202243,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x221e42,
- 0x2be043,
- 0x2f5003,
- 0x20b283,
- 0x202e02,
- 0x248083,
- 0x204803,
- 0x206e83,
+ 0x2019c1,
+ 0x201a81,
+ 0x2005c1,
+ 0x2007c1,
+ 0x200cc1,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x231b83,
+ 0x200382,
+ 0x200383,
+ 0x13ecc7,
+ 0xfcc7,
+ 0x28b86,
+ 0x3dcca,
+ 0x8cc48,
+ 0x58dc8,
+ 0x59207,
+ 0x62a46,
+ 0xde185,
+ 0x63c85,
+ 0x177ac6,
+ 0x125886,
+ 0x24ae04,
+ 0x31cdc7,
+ 0x15f048,
+ 0x2da904,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x2d0783,
+ 0x231b83,
+ 0x2135c3,
+ 0x332ec3,
+ 0x204303,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x217082,
+ 0x2c8dc3,
+ 0x21fd43,
+ 0x200603,
+ 0x202942,
+ 0x251d43,
+ 0x205283,
+ 0x21e743,
0x200001,
- 0x207043,
- 0x26ff44,
- 0x324dc3,
- 0x30c683,
- 0x21dec3,
- 0x379b43,
- 0xaa2d183,
- 0x2374c4,
- 0x21de83,
- 0x232383,
- 0x2343c3,
- 0x234103,
- 0x208143,
- 0x2a3ec3,
- 0x30c603,
- 0x228103,
- 0x212103,
- 0x24c1c4,
- 0x23aa82,
- 0x252a43,
- 0x2585c3,
- 0x272bc3,
- 0x250b43,
- 0x24f8c3,
- 0x21eb03,
- 0x2db983,
- 0x220883,
- 0x201603,
- 0x210483,
- 0x2f2903,
- 0xaefe5c3,
- 0x385d43,
- 0x200983,
- 0x2348c3,
- 0x211003,
- 0x21e442,
- 0x286fc3,
- 0x238483,
- 0x16025c3,
- 0x217e83,
- 0x21da43,
- 0x29af43,
- 0x2264c3,
- 0x30e803,
- 0x21bd03,
- 0x2ad283,
- 0x2f6a83,
- 0x2e8883,
- 0x21d445,
- 0x215cc3,
- 0x2e88c3,
- 0x39c083,
- 0x218744,
- 0x25b343,
- 0x22e8c3,
- 0x277c03,
- 0x20b443,
- 0x221e42,
- 0x23a183,
- 0x2f9b84,
- 0x2ae9c4,
- 0x244843,
- 0x880c8,
- 0x882,
- 0x1002,
- 0x2e02,
- 0x1482,
- 0x2d42,
- 0x4c2,
- 0x44682,
- 0x202,
+ 0x203e43,
+ 0x225b04,
+ 0x37f1c3,
+ 0x318cc3,
+ 0x21c403,
+ 0x360383,
+ 0xaad0783,
+ 0x23a184,
+ 0x21c3c3,
+ 0x22f143,
+ 0x231b83,
+ 0x2318c3,
+ 0x23a943,
+ 0x2a85c3,
+ 0x318c43,
+ 0x233ec3,
+ 0x201e43,
+ 0x253f84,
+ 0x2abc02,
+ 0x258683,
+ 0x25eb43,
+ 0x27bfc3,
+ 0x262883,
+ 0x201dc3,
+ 0x332ec3,
+ 0x208803,
+ 0x209e43,
+ 0x204143,
+ 0x210203,
+ 0x2ff083,
+ 0xae30043,
+ 0x2b1083,
+ 0x2113c3,
+ 0x22d603,
+ 0x20fbc3,
+ 0x226302,
+ 0x201683,
+ 0x204ac3,
+ 0x160abc3,
+ 0x27d643,
+ 0x20ff03,
+ 0x216ec3,
+ 0x200383,
+ 0x3b37c3,
+ 0x21aa03,
+ 0x241f03,
+ 0x304f43,
+ 0x2f8203,
+ 0x30c845,
+ 0x2202c3,
+ 0x2f8243,
+ 0x35ed83,
+ 0x218c84,
+ 0x265203,
+ 0x311883,
+ 0x2d8fc3,
+ 0x201383,
+ 0x217082,
+ 0x23bd83,
+ 0x308484,
+ 0x22fec4,
+ 0x22a843,
+ 0x15f048,
+ 0x4cc2,
+ 0x1442,
+ 0x2942,
+ 0x5ac2,
+ 0x2302,
+ 0x702,
+ 0x4e242,
+ 0x1c2,
+ 0x8a42,
+ 0xc02,
+ 0xf302,
+ 0xb602,
+ 0x73fc2,
+ 0x4c82,
+ 0x61e82,
+ 0x17902,
+ 0x3cf82,
+ 0x54c2,
+ 0x18b82,
+ 0xfc2,
+ 0x682,
+ 0x1bb82,
0x1f82,
- 0x982,
- 0x43742,
- 0xe842,
- 0xe02,
- 0x7a82,
- 0x93d42,
- 0x6d42,
- 0x26282,
- 0x7442,
- 0x1f882,
- 0x8b02,
- 0x4b42,
- 0x1c882,
- 0x13c2,
- 0x17642,
- 0x1402,
- 0xdfc2,
- 0x6ec2,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x216582,
- 0x2264c3,
- 0xc22d183,
- 0x21eb03,
- 0x211003,
- 0x223b42,
- 0x880c8,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x6c2,
- 0x202f02,
- 0x223f42,
- 0x880c8,
- 0x16582,
- 0x235f82,
- 0x203142,
- 0x23e682,
- 0x201642,
- 0x208382,
- 0x51f05,
- 0x2029c2,
- 0x202282,
- 0x203382,
- 0x205d02,
- 0x206d42,
- 0x385542,
+ 0xc4c2,
+ 0x1702,
+ 0x20c42,
+ 0xa42,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x20d1c2,
+ 0x200383,
+ 0xc2d0783,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x20dc42,
+ 0x15f048,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x6c82,
+ 0x2031c2,
+ 0x24ac42,
+ 0x15f048,
+ 0xd1c2,
+ 0x233482,
+ 0x208842,
+ 0x22f942,
+ 0x204182,
+ 0x209282,
+ 0x63c85,
+ 0x204702,
0x201882,
- 0x227642,
- 0x16e747,
- 0x119d4d,
- 0xeafc9,
- 0x47b8b,
- 0xd1e88,
- 0x13bc89,
- 0x21eb03,
- 0x880c8,
- 0x880c8,
- 0x53e06,
- 0x200882,
- 0x224104,
- 0x216582,
- 0x22d183,
- 0x201a42,
- 0x2343c3,
- 0x201f82,
- 0x22d684,
- 0x202243,
- 0x209782,
- 0x238483,
- 0x201502,
- 0x2264c3,
- 0x241f86,
- 0x30d40f,
- 0x6fef43,
- 0x880c8,
- 0x216582,
- 0x211cc3,
- 0x21eb03,
- 0x211003,
- 0x1568ecb,
- 0x16e747,
- 0x216582,
- 0x22d183,
- 0x21eb03,
- 0x238483,
- 0x200882,
- 0x201102,
- 0x2093c2,
- 0xfa2d183,
- 0x23e4c2,
- 0x2343c3,
- 0x2475c2,
- 0x227982,
- 0x21eb03,
- 0x21c2c2,
- 0x301dc2,
- 0x2a7fc2,
- 0x201142,
- 0x289f82,
- 0x206982,
+ 0x211f82,
+ 0x2034c2,
+ 0x217902,
+ 0x384982,
+ 0x201ac2,
+ 0x245742,
+ 0x13ecc7,
+ 0x169a8d,
+ 0xde209,
+ 0x56bcb,
+ 0xe3888,
+ 0x55109,
+ 0x332ec3,
+ 0x15f048,
+ 0x15f048,
+ 0x59b46,
+ 0x204cc2,
+ 0x24ae04,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x2000c2,
+ 0x231b83,
+ 0x208a42,
+ 0x2da904,
+ 0x204303,
+ 0x2513c2,
+ 0x204ac3,
+ 0x200382,
+ 0x200383,
+ 0x2716c6,
+ 0x31c0cf,
+ 0x70d8c3,
+ 0x15f048,
+ 0x20d1c2,
+ 0x2135c3,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x155afcb,
+ 0xde548,
+ 0x14ff507,
+ 0x13ecc7,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x332ec3,
+ 0x204ac3,
+ 0x204cc2,
0x200902,
- 0x205e82,
- 0x26a242,
- 0x204d42,
- 0x2ad802,
- 0x230cc2,
- 0x225a02,
- 0x228f02,
- 0x211003,
- 0x203042,
- 0x238483,
- 0x2425c2,
- 0x267c02,
- 0x2264c3,
- 0x248102,
- 0x217642,
- 0x20a442,
- 0x202482,
- 0x2168c2,
- 0x2d29c2,
- 0x210442,
- 0x242d42,
- 0x221bc2,
- 0x301e0a,
- 0x34600a,
- 0x38074a,
- 0x3b4682,
- 0x20d802,
- 0x23c282,
- 0xff49009,
- 0x103a418a,
- 0x1042fe87,
- 0xc002,
- 0x1a418a,
- 0x245dc4,
- 0x10e2d183,
- 0x2343c3,
- 0x247344,
- 0x21eb03,
- 0x201604,
- 0x202243,
- 0x211003,
- 0x238483,
- 0x2025c3,
- 0x2264c3,
- 0x215cc3,
- 0x223ec3,
- 0x880c8,
- 0x1450c84,
- 0x50505,
- 0x4e80a,
- 0x109842,
- 0x18b406,
- 0x162d51,
- 0x11749009,
- 0x163187,
- 0x4802,
- 0x1aa80a,
- 0xdb7c7,
- 0x880c8,
- 0xfd948,
- 0xe707,
- 0x1281c44b,
- 0x15802,
- 0x1a6707,
- 0x1b1a4a,
- 0x10728f,
- 0x131b4f,
- 0x1dec2,
- 0x16582,
- 0xa3e08,
- 0xea70a,
- 0x167408,
+ 0x207f42,
+ 0xfad0783,
+ 0x2416c2,
+ 0x231b83,
+ 0x2101c2,
+ 0x22ad02,
+ 0x332ec3,
+ 0x2630c2,
+ 0x255302,
+ 0x2ae4c2,
+ 0x203742,
+ 0x291e02,
+ 0x209902,
+ 0x200b82,
+ 0x274842,
+ 0x258142,
+ 0x251b02,
+ 0x2b36c2,
+ 0x242602,
+ 0x246082,
+ 0x263c42,
+ 0x20fbc3,
+ 0x205f02,
+ 0x204ac3,
+ 0x231302,
+ 0x27de02,
+ 0x200383,
+ 0x251dc2,
+ 0x20c4c2,
+ 0x209f42,
+ 0x200b42,
+ 0x20c842,
+ 0x2e4742,
+ 0x220382,
+ 0x24d082,
+ 0x234f42,
+ 0x310c8a,
+ 0x347d0a,
+ 0x37e80a,
+ 0x3b5dc2,
+ 0x2046c2,
+ 0x204e82,
+ 0xff4f589,
+ 0x10324d0a,
+ 0x15926c7,
+ 0x1410c43,
+ 0x243d0,
+ 0x9402,
+ 0x24fe44,
+ 0x10ad0783,
+ 0x231b83,
+ 0x251304,
+ 0x332ec3,
+ 0x2964c4,
+ 0x204303,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x20abc3,
+ 0x200383,
+ 0x2202c3,
+ 0x24abc3,
+ 0x15f048,
+ 0x14629c4,
+ 0x614c5,
+ 0x5f88a,
+ 0x1168c2,
+ 0x1a03c6,
+ 0x102d11,
+ 0x1134f589,
+ 0x61548,
+ 0x82a08,
+ 0x5e887,
0xf82,
- 0x10700f,
- 0x124e4b,
- 0x2988,
- 0x16e847,
- 0x16a8a,
- 0xae14b,
- 0x112089,
- 0x173507,
- 0xf424c,
- 0x10ec87,
- 0xd060a,
- 0x132d48,
- 0x8e28e,
- 0x553ce,
- 0xdb60b,
- 0x110d8b,
- 0xead0b,
- 0x1e1c9,
- 0x1fb8b,
- 0x2398d,
- 0x260cb,
- 0x2708d,
- 0x2c90d,
- 0x2ec8a,
- 0xae80b,
- 0xc6fcb,
- 0xe82c5,
- 0x10a710,
- 0x8128f,
- 0xb74f,
- 0x2a24d,
- 0x6fd50,
- 0xd82,
- 0x12fa2488,
- 0x131948,
- 0x132e4bc5,
- 0x4668b,
- 0x52088,
- 0x110f4a,
- 0x58d89,
- 0x60587,
- 0x608c7,
- 0x60a87,
- 0x611c7,
- 0x629c7,
- 0x62f47,
- 0x636c7,
- 0x63d47,
- 0x64307,
- 0x644c7,
- 0x66087,
- 0x66247,
- 0x66407,
- 0x665c7,
- 0x668c7,
- 0x66e07,
- 0x67a47,
- 0x67f07,
- 0x68707,
- 0x69207,
- 0x693c7,
- 0x699c7,
- 0x69e87,
- 0x6a087,
- 0x6a347,
- 0x6a507,
- 0x6a6c7,
- 0x6ac07,
- 0x6b4c7,
- 0x6bf87,
- 0x6c687,
- 0x6c947,
- 0x6ce07,
- 0x6cfc7,
- 0x6d347,
- 0x6e3c7,
- 0x6ea07,
- 0x6ee07,
- 0x6efc7,
- 0x6f187,
- 0x6f5c7,
- 0x70307,
- 0x70607,
- 0x70c07,
- 0x70dc7,
- 0x71147,
- 0x71587,
- 0xd382,
- 0x33d8a,
- 0xf9dc7,
- 0x134c87cb,
- 0x14c87d6,
- 0x18351,
- 0xdfb8a,
- 0xa3c8a,
- 0x53e06,
- 0xc114b,
- 0xb2c2,
- 0x31ad1,
- 0x959c9,
- 0x90ac9,
- 0x5e82,
- 0x9c34a,
- 0xa5449,
- 0xa5c8f,
- 0xa688e,
- 0xa7188,
- 0xf1c2,
- 0x169a89,
- 0x8498e,
- 0xac64c,
- 0xd400f,
- 0x194a8e,
- 0x1098c,
- 0x15309,
- 0x16451,
- 0x19a48,
- 0x2bd52,
- 0x2e5cd,
- 0x393cd,
- 0x13ff8b,
- 0x179d95,
- 0x33c49,
- 0x5488a,
- 0x58749,
- 0x5fe90,
- 0x60f0b,
- 0x6e54f,
- 0x71d0b,
- 0x756cc,
- 0x787d0,
- 0x8660a,
- 0x86e8d,
- 0x14ea0e,
- 0x18004a,
- 0x8c7cc,
- 0x8fa54,
- 0x95651,
- 0x98f8b,
- 0x9b54f,
- 0xab6cd,
- 0xabfce,
- 0x12c10c,
- 0x15710c,
- 0xdc8cb,
- 0xeef8e,
- 0xfb250,
- 0x10938b,
- 0x11270d,
- 0x15f28f,
- 0xb504c,
- 0xb824e,
- 0xb8a51,
- 0xba84c,
- 0x1362c7,
- 0x11c60d,
- 0xbe94c,
- 0xc4d90,
- 0xd35cd,
- 0xe7847,
- 0xec4d0,
- 0xf0688,
- 0xf124b,
- 0x17318f,
- 0x2b848,
- 0xdfd8d,
- 0x1763d0,
- 0x13aaf9c6,
- 0xb0bc3,
- 0x9682,
- 0x2cd09,
- 0x551ca,
- 0xf9bc6,
- 0x13cd5389,
- 0x124c3,
- 0x109f11,
- 0x9f89,
- 0xcd5c7,
- 0x10710b,
- 0xd2d10,
- 0xd31cc,
- 0xd47c5,
- 0x11ab08,
- 0x19be4a,
- 0x122b07,
- 0x25c2,
- 0x5160a,
- 0x1694c9,
- 0xa62ca,
- 0x1abe8f,
- 0x4084b,
- 0x10760c,
- 0x1078d2,
- 0xb5485,
- 0x15d98a,
- 0x142e1fc5,
- 0x19900c,
- 0x1157c3,
- 0x185542,
- 0xe8e4a,
- 0x108548,
- 0x163407,
- 0x4b42,
- 0x7982,
- 0x1bc2,
- 0x129e10,
- 0x1402,
- 0x3074f,
- 0x161186,
- 0x1113ce,
- 0xe3a4b,
- 0x180248,
- 0xc9a89,
- 0x17e4d2,
- 0x178b8d,
- 0x45e88,
- 0x47a49,
- 0x485cd,
- 0x4a189,
- 0x4a64b,
- 0x4ac08,
- 0x4e648,
- 0x53f48,
- 0x559c9,
- 0x55bca,
- 0x57f4c,
- 0xe31ca,
- 0xf6ac7,
- 0xdfcd,
- 0xeb88b,
- 0x9eb0c,
- 0x18b610,
- 0x3282,
- 0xc570d,
- 0x6202,
- 0x33c2,
- 0xf6a0a,
- 0xdfa8a,
- 0xe5e4b,
- 0xc718c,
- 0xfd6ce,
- 0x165d0d,
- 0xf3dc8,
- 0x6c2,
- 0x11a0c0ce,
- 0x11c2fe87,
- 0x121aa0c9,
- 0x11583,
- 0x127117cc,
- 0xc002,
- 0x50111,
- 0xc011,
- 0xa1091,
- 0x81ed1,
- 0x11170f,
- 0x11dfcc,
- 0x121acd,
- 0x123f0d,
- 0x142615,
- 0x14b18c,
- 0x159590,
- 0xfa8c,
- 0x5274c,
- 0x47109,
- 0xc002,
- 0x501ce,
- 0xc0ce,
- 0xa114e,
- 0x81f8e,
- 0x1117cc,
- 0x11e089,
- 0x14b249,
- 0x14280d,
- 0xfb49,
- 0x52809,
- 0x1267c3,
- 0x940c3,
- 0xc002,
- 0x162d45,
- 0x1aa804,
- 0xdf704,
- 0x127244,
- 0x17f904,
- 0x17c084,
- 0x163184,
- 0x144bdc3,
- 0x140de83,
- 0x19fd04,
- 0x1573dc3,
- 0xd82,
- 0x165d03,
- 0x200882,
- 0x216582,
- 0x201a42,
- 0x206ac2,
- 0x201f82,
- 0x201502,
- 0x201bc2,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x201603,
- 0x238483,
- 0x2264c3,
- 0x880c8,
- 0x22d183,
- 0x2343c3,
- 0x238483,
- 0x2264c3,
- 0x1d003,
- 0x21eb03,
- 0x200882,
- 0x323ac3,
- 0x15e2d183,
- 0x330d47,
- 0x21eb03,
- 0x332683,
- 0x212444,
- 0x238483,
- 0x2264c3,
- 0x24690a,
- 0x241f85,
- 0x21bd03,
- 0x203e42,
- 0x880c8,
- 0x880c8,
- 0x16582,
- 0x113682,
- 0x1a6845,
- 0x880c8,
- 0x2d183,
- 0x77947,
- 0x1161cf,
- 0xf9c44,
- 0x11220a,
- 0xac287,
- 0xf78a,
- 0x93e8a,
- 0xa660a,
- 0xf9bc6,
- 0x27ca,
- 0xccd,
- 0x123ac3,
- 0x880c8,
- 0x16582,
- 0x47344,
- 0x67683,
- 0xe9cc5,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x204803,
- 0x22d183,
- 0x2343c3,
- 0x211cc3,
- 0x21eb03,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x290c83,
- 0x223ec3,
- 0x204803,
- 0x224104,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x232dc3,
- 0x22d183,
- 0x2343c3,
- 0x206ac3,
- 0x211cc3,
- 0x21eb03,
- 0x201604,
- 0x36b683,
- 0x2348c3,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x21bd03,
- 0x3b0343,
- 0x1822d183,
- 0x2343c3,
- 0x244d43,
- 0x21eb03,
- 0x275803,
- 0x2348c3,
- 0x2264c3,
- 0x207443,
- 0x27f5c4,
- 0x880c8,
- 0x18a2d183,
- 0x2343c3,
- 0x2a7243,
- 0x21eb03,
- 0x211003,
- 0x212444,
- 0x238483,
- 0x2264c3,
- 0x220703,
- 0x880c8,
- 0x1922d183,
- 0x2343c3,
- 0x211cc3,
- 0x2025c3,
- 0x2264c3,
- 0x880c8,
- 0x142fe87,
- 0x323ac3,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x201604,
- 0x212444,
- 0x238483,
- 0x2264c3,
- 0x16e747,
- 0x176c84,
- 0x1462d48,
- 0xa7dcd,
- 0x3256c5,
- 0x880c8,
- 0x742,
- 0x35bc3,
- 0xe6786,
- 0x307e48,
- 0x3afd07,
- 0x224104,
- 0x355346,
- 0x359446,
- 0x880c8,
- 0x301043,
- 0x20b149,
- 0x2b46d5,
- 0xb46df,
- 0x22d183,
- 0x32f8d2,
- 0xfea86,
- 0x13af45,
- 0x110f4a,
- 0x58d89,
- 0x32f68f,
- 0x22d684,
- 0x331145,
- 0x2f26d0,
- 0x3aaf87,
- 0x2025c3,
- 0x32d208,
- 0x2aeeca,
- 0x2014c4,
- 0x2e1a03,
- 0x241f86,
- 0x203e42,
- 0x38660b,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x2e6a83,
- 0x216582,
- 0x238483,
- 0x2264c3,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x211003,
- 0x2264c3,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x332683,
- 0x203043,
- 0x2264c3,
- 0x216582,
- 0x22d183,
- 0x2343c3,
- 0x238483,
- 0x2264c3,
- 0x200882,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x224104,
- 0x22d183,
- 0x2343c3,
- 0x307b04,
- 0x238483,
- 0x2264c3,
- 0x880c8,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x22d183,
- 0x2343c3,
- 0x211cc3,
- 0x220883,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x216582,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x880c8,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x251283,
- 0x2efc3,
- 0x132683,
- 0x238483,
- 0x2264c3,
- 0x301e0a,
- 0x31ec09,
- 0x33e6cb,
- 0x33ed4a,
- 0x34600a,
- 0x3543cb,
- 0x372d8a,
- 0x37acca,
- 0x38074a,
- 0x3809cb,
- 0x39bb89,
- 0x39d94a,
- 0x39e38b,
- 0x3a9bcb,
- 0x3b2c8a,
- 0x22d183,
- 0x2343c3,
- 0x211cc3,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x37549,
- 0x880c8,
- 0x22d183,
- 0x260584,
- 0x214a02,
- 0x212444,
- 0x226bc5,
- 0x204803,
- 0x224104,
- 0x22d183,
- 0x2374c4,
- 0x2343c3,
- 0x247344,
- 0x22d684,
- 0x201604,
- 0x2348c3,
- 0x238483,
- 0x2264c3,
- 0x28fb85,
- 0x232dc3,
- 0x21bd03,
- 0x25b743,
- 0x252dc4,
- 0x250bc4,
- 0x26dfc5,
- 0x880c8,
- 0x2f88c4,
- 0x208606,
- 0x283c04,
- 0x216582,
- 0x360307,
- 0x249c07,
- 0x2455c4,
- 0x257a05,
- 0x2d37c5,
- 0x2a9c05,
- 0x201604,
- 0x318348,
- 0x36ed86,
- 0x2dbb08,
- 0x236f45,
- 0x2cf145,
- 0x240584,
- 0x2264c3,
- 0x2e26c4,
- 0x353586,
- 0x242083,
- 0x252dc4,
- 0x262c45,
- 0x2cfbc4,
- 0x365b84,
- 0x203e42,
- 0x245206,
- 0x392446,
- 0x2f56c5,
- 0x200882,
- 0x323ac3,
- 0x1f216582,
- 0x2358c4,
- 0x201f82,
- 0x211003,
- 0x209f82,
- 0x238483,
- 0x201502,
- 0x217643,
- 0x223ec3,
- 0x880c8,
- 0x880c8,
- 0x21eb03,
- 0x200882,
- 0x1fe16582,
- 0x21eb03,
- 0x266383,
- 0x36b683,
- 0x31f984,
- 0x238483,
- 0x2264c3,
- 0x880c8,
- 0x200882,
- 0x20616582,
- 0x22d183,
- 0x238483,
- 0x2264c3,
- 0x4b42,
- 0x2019c2,
- 0x221e42,
- 0x332683,
- 0x2db083,
- 0x200882,
- 0x880c8,
- 0x16e747,
- 0x216582,
- 0x2343c3,
- 0x247344,
- 0x208f43,
- 0x21eb03,
- 0x220883,
- 0x211003,
- 0x238483,
- 0x21ab43,
- 0x2264c3,
- 0x220683,
- 0x1244d3,
- 0x12f214,
- 0x16e747,
- 0x15686,
- 0x1e1c6,
- 0x52fc7,
- 0x9f049,
- 0x2654a,
- 0x85b0d,
- 0x119a4c,
- 0x29e8a,
- 0x51f05,
- 0x18bec8,
- 0x161186,
- 0x155646,
- 0x200d82,
- 0xde40c,
- 0x1aa9c7,
- 0x24d11,
- 0x22d183,
- 0xd0585,
- 0x1b4284,
- 0x18346,
- 0x19f046,
- 0x8a24a,
- 0xacec3,
- 0x9f005,
- 0xce83,
- 0xc120c,
- 0xe5408,
- 0x1ad408,
- 0xa0288,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x200882,
- 0x216582,
- 0x21eb03,
- 0x2082c2,
- 0x238483,
- 0x2264c3,
- 0x217643,
- 0x35e48f,
- 0x35e84e,
- 0x880c8,
- 0x22d183,
- 0x429c7,
- 0x2343c3,
- 0x21eb03,
- 0x202243,
- 0x238483,
- 0x2264c3,
- 0x220003,
- 0x36b047,
- 0x204642,
- 0x2a9849,
- 0x201002,
- 0x32a10b,
- 0x28c14a,
- 0x2a4209,
- 0x201902,
- 0x250e06,
- 0x248f95,
- 0x32a255,
- 0x24de93,
- 0x32a7d3,
- 0x2056c2,
- 0x214605,
- 0x27ff4c,
- 0x219e0b,
- 0x269005,
- 0x201482,
- 0x2040c2,
- 0x377506,
- 0x204802,
- 0x24eb06,
- 0x332ecd,
- 0x36288c,
- 0x30a784,
- 0x2009c2,
- 0x219f02,
- 0x22c108,
- 0x202d42,
- 0x29d5c6,
- 0x3345c4,
- 0x249155,
- 0x24e013,
- 0x20a583,
- 0x34868a,
- 0x30e547,
- 0x2e6089,
- 0x20f507,
- 0x24f882,
+ 0x19a18a,
+ 0x2ac47,
+ 0x15f048,
+ 0x10b708,
+ 0xbac7,
+ 0x16c1b74b,
+ 0x1082,
+ 0x15de87,
+ 0xdb4a,
+ 0x5e58f,
+ 0xfd4f,
+ 0x1c402,
+ 0xd1c2,
+ 0xa8508,
+ 0x185b0a,
+ 0x1681c8,
+ 0x3b02,
+ 0x5e30f,
+ 0xa3d4b,
+ 0x1672c8,
+ 0x13edc7,
+ 0x15104a,
+ 0x2f64b,
+ 0x11dd09,
+ 0x150f47,
+ 0x100c4c,
+ 0x1b3c47,
+ 0x18d18a,
+ 0x94b88,
+ 0x195a8e,
+ 0x28b8e,
+ 0x2aa8b,
+ 0x2b2cb,
+ 0x2d3cb,
+ 0x2e209,
+ 0x3558b,
+ 0x4a68d,
+ 0xe984b,
+ 0xec8cd,
+ 0xecc4d,
+ 0x18274a,
+ 0x2fd0b,
+ 0x3688b,
+ 0x42305,
+ 0x14243d0,
+ 0x125d8f,
+ 0x1264cf,
+ 0x48dcd,
+ 0x25910,
+ 0x1742,
+ 0x17203988,
+ 0xfb48,
+ 0x176f4745,
+ 0x505cb,
+ 0x117050,
+ 0x57488,
+ 0x2b48a,
+ 0x5f4c9,
+ 0x695c7,
+ 0x69907,
+ 0x69ac7,
+ 0x6c287,
+ 0x6d307,
+ 0x6dd07,
+ 0x6e487,
+ 0x6e8c7,
+ 0x6f487,
+ 0x6f787,
+ 0x6ffc7,
+ 0x70187,
+ 0x70347,
+ 0x70507,
+ 0x70807,
+ 0x70c47,
+ 0x718c7,
+ 0x71d87,
+ 0x729c7,
+ 0x72f07,
+ 0x730c7,
+ 0x73807,
+ 0x73e87,
+ 0x74087,
+ 0x74347,
+ 0x74507,
+ 0x746c7,
+ 0x75047,
+ 0x754c7,
+ 0x75987,
+ 0x76147,
+ 0x76407,
+ 0x76bc7,
+ 0x76d87,
+ 0x77107,
+ 0x77d07,
+ 0x78987,
+ 0x78d87,
+ 0x78f47,
+ 0x79107,
+ 0x79547,
+ 0x7a307,
+ 0x7a607,
+ 0x7a907,
+ 0x7aac7,
+ 0x7ae47,
+ 0x7b387,
+ 0xa9c2,
+ 0x4c94a,
+ 0x16dc87,
+ 0x178d528b,
+ 0x14d5296,
+ 0x19151,
+ 0xf080a,
+ 0xa838a,
+ 0x59b46,
+ 0xd2acb,
+ 0x642,
+ 0x2e891,
+ 0x94609,
+ 0x9a109,
+ 0x74842,
+ 0xa4f4a,
+ 0xaa689,
+ 0xab24f,
+ 0xaca4e,
+ 0xad708,
+ 0x18d82,
+ 0x15da89,
+ 0x18b88e,
+ 0xfd08c,
+ 0xf254f,
+ 0x146ce,
+ 0x23b4c,
+ 0x2ccc9,
+ 0x2db51,
+ 0x465c8,
+ 0x482d2,
+ 0x49fcd,
+ 0x82bcd,
+ 0x19090b,
+ 0x3d2d5,
+ 0x4c809,
+ 0x4ec0a,
+ 0x4f489,
+ 0x5ecd0,
+ 0x72c4b,
+ 0x79f4f,
+ 0x7c48b,
+ 0x8340c,
+ 0x84610,
+ 0x8894a,
+ 0x8dd0d,
+ 0x16618e,
+ 0x1ae00a,
+ 0x8f7cc,
+ 0x93994,
+ 0x94291,
+ 0xa494b,
+ 0xa578f,
+ 0xa7bcd,
+ 0xac3ce,
+ 0xb1acc,
+ 0xb220c,
+ 0xdc90b,
+ 0xdcc0e,
+ 0x122110,
+ 0x11640b,
+ 0x17a64d,
+ 0x1af38f,
+ 0xb798c,
+ 0xb934e,
+ 0xbb311,
+ 0xc3ccc,
+ 0xc5a47,
+ 0x15e58d,
+ 0x12b50c,
+ 0x14be50,
+ 0xd1b4d,
+ 0xd8e47,
+ 0xe2350,
+ 0xfa008,
+ 0xfb08b,
+ 0x150bcf,
+ 0x17de88,
+ 0xf0a0d,
+ 0x181d50,
+ 0x17fb1846,
+ 0xb6003,
+ 0x1b02,
+ 0xd0309,
+ 0x5ac0a,
+ 0x1084c6,
+ 0x180dff49,
+ 0x13203,
+ 0xdab91,
+ 0xdafc9,
+ 0xdc047,
+ 0x5e40b,
+ 0xe4a90,
+ 0xe4f4c,
+ 0xe5385,
+ 0x126cc8,
+ 0x19dc0a,
+ 0x129607,
+ 0x1002,
+ 0x12464a,
+ 0x25e49,
+ 0x3a20a,
+ 0x8eacf,
+ 0x44f4b,
+ 0x1b280c,
+ 0x1b2ad2,
+ 0xaa085,
+ 0x2124a,
+ 0x186f2fc5,
+ 0x17698c,
+ 0x121203,
+ 0x184982,
+ 0xf86ca,
+ 0x96b88,
+ 0xeca88,
+ 0x14a587,
+ 0xd42,
+ 0x2602,
+ 0x3f390,
+ 0x1702,
+ 0x1aa2cf,
+ 0x177ac6,
+ 0x301ce,
+ 0xe7fcb,
+ 0x1ae208,
+ 0xd6c09,
+ 0x17cd92,
+ 0x7c0d,
+ 0x56608,
+ 0x56a89,
+ 0x5700d,
+ 0x59c89,
+ 0x5a28b,
+ 0x5b088,
+ 0x5f6c8,
+ 0x68bc8,
+ 0x68e49,
+ 0x6904a,
+ 0x6c8cc,
+ 0xe5d0a,
+ 0x104f87,
+ 0x16b2cd,
+ 0xf910b,
+ 0x12fb4c,
+ 0x1a05d0,
+ 0x6902,
+ 0x1968cd,
+ 0x16c2,
+ 0x11fc2,
+ 0x104eca,
+ 0xf070a,
+ 0xf6bcb,
+ 0x36a4c,
+ 0x10b48e,
+ 0x21ccd,
+ 0x1ab488,
+ 0x6c82,
+ 0x1166118e,
+ 0x11f6a18e,
+ 0x1266c00a,
+ 0x12ed0a0e,
+ 0x137156ce,
+ 0x13f2a00c,
+ 0x15926c7,
+ 0x15926c9,
+ 0x1410c43,
+ 0x14731e8c,
+ 0x14f3a009,
+ 0x1409402,
+ 0x610d1,
+ 0x16a0d1,
+ 0x6bf4d,
+ 0xd0951,
+ 0x11b1d1,
+ 0x129f4f,
+ 0x131dcf,
+ 0x139f4c,
+ 0x14a94d,
+ 0x18d555,
+ 0x1ace0c,
+ 0x1b41cc,
+ 0x1b5850,
+ 0x940c,
+ 0x5838c,
+ 0xedc19,
+ 0x1a6719,
+ 0x115419,
+ 0x15c754,
+ 0x17f854,
+ 0x198594,
+ 0x19ae14,
+ 0x1a9054,
+ 0x1577fb09,
+ 0x15d98849,
+ 0x167b4289,
+ 0x11b6b089,
+ 0x9402,
+ 0x1236b089,
+ 0x9402,
+ 0xedc0a,
+ 0x9402,
+ 0x12b6b089,
+ 0x9402,
+ 0xedc0a,
+ 0x9402,
+ 0x1336b089,
+ 0x9402,
+ 0x13b6b089,
+ 0x9402,
+ 0x1436b089,
+ 0x9402,
+ 0xedc0a,
+ 0x9402,
+ 0x14b6b089,
+ 0x9402,
+ 0xedc0a,
+ 0x9402,
+ 0x1536b089,
+ 0x9402,
+ 0x15b6b089,
+ 0x9402,
+ 0x1636b089,
+ 0x9402,
+ 0x16b6b089,
+ 0x9402,
+ 0xedc0a,
+ 0x9402,
+ 0x102d05,
+ 0x19a184,
+ 0x11d644,
+ 0x1a4884,
+ 0xbfc04,
+ 0x2144,
+ 0x5e884,
+ 0x1482283,
+ 0x1420183,
+ 0xffd84,
+ 0x1542b83,
+ 0x1742,
+ 0x21cc3,
+ 0x204cc2,
+ 0x20d1c2,
+ 0x2000c2,
+ 0x2041c2,
+ 0x208a42,
+ 0x200382,
+ 0x202602,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204143,
+ 0x204ac3,
+ 0x200383,
+ 0x15f048,
+ 0x2d0783,
+ 0x231b83,
+ 0x204ac3,
+ 0x200383,
+ 0x3b943,
+ 0x332ec3,
+ 0x204cc2,
+ 0x368883,
+ 0x1a2d0783,
+ 0x20ef47,
+ 0x332ec3,
+ 0x205d83,
+ 0x213184,
+ 0x204ac3,
+ 0x200383,
+ 0x25084a,
+ 0x2716c5,
+ 0x21aa03,
+ 0x205bc2,
+ 0x15f048,
+ 0x15f048,
+ 0xd1c2,
+ 0x11f0c2,
+ 0x15dfc5,
+ 0x15f048,
+ 0xd0783,
+ 0x1ae3db07,
+ 0xcfd46,
+ 0x1b1acd05,
+ 0xcfe07,
+ 0xa54a,
+ 0xa408,
+ 0xb747,
+ 0x5f2c8,
+ 0x18c407,
+ 0xed30f,
+ 0x3ab07,
+ 0x165bc6,
+ 0x117050,
+ 0x122f0f,
+ 0x108544,
+ 0x1b4cfece,
+ 0xafd0c,
+ 0x11de8a,
+ 0xac687,
+ 0x12d54a,
+ 0x60989,
+ 0xc2f4a,
+ 0x77a8a,
+ 0x1084c6,
+ 0xac74a,
+ 0x11a58a,
+ 0x154009,
+ 0xda448,
+ 0xda746,
+ 0xde74d,
+ 0xb9905,
+ 0x5a107,
+ 0x16df94,
+ 0xfe58b,
+ 0x16710a,
+ 0xa8bcd,
+ 0x28b83,
+ 0x28b83,
+ 0x28b86,
+ 0x28b83,
+ 0x168883,
+ 0x15f048,
+ 0xd1c2,
+ 0x51304,
+ 0x8cdc3,
+ 0x170145,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x205283,
+ 0x2d0783,
+ 0x231b83,
+ 0x2135c3,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x29a2c3,
+ 0x24abc3,
+ 0x205283,
+ 0x24ae04,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x209103,
+ 0x2d0783,
+ 0x231b83,
+ 0x2041c3,
+ 0x2135c3,
+ 0x332ec3,
+ 0x2964c4,
+ 0x23a0c3,
+ 0x22d603,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x21aa03,
+ 0x38c743,
+ 0x1d2d0783,
+ 0x231b83,
+ 0x2c3ec3,
+ 0x332ec3,
+ 0x2075c3,
+ 0x22d603,
+ 0x200383,
+ 0x2054c3,
+ 0x343c44,
+ 0x15f048,
+ 0x1dad0783,
+ 0x231b83,
+ 0x2ad7c3,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x213184,
+ 0x204ac3,
+ 0x200383,
+ 0x21d7c3,
+ 0x15f048,
+ 0x1e2d0783,
+ 0x231b83,
+ 0x2135c3,
+ 0x20abc3,
+ 0x200383,
+ 0x15f048,
+ 0x15926c7,
+ 0x368883,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x2964c4,
+ 0x213184,
+ 0x204ac3,
+ 0x200383,
+ 0x13ecc7,
+ 0x16e1cb,
+ 0xdb3c4,
+ 0xb9905,
+ 0x1491b48,
+ 0xae2cd,
+ 0x1f68a405,
+ 0x192c4,
+ 0x1a5c3,
+ 0x367fc5,
+ 0x15f048,
+ 0x1d202,
+ 0x2803,
+ 0xf7286,
+ 0x32f448,
+ 0x304507,
+ 0x24ae04,
+ 0x3b3006,
+ 0x3b5706,
+ 0x15f048,
+ 0x310683,
+ 0x2384c9,
+ 0x2bdad5,
+ 0xbdadf,
+ 0x2d0783,
+ 0x39a9d2,
+ 0xf5806,
+ 0x10cfc5,
+ 0x2b48a,
+ 0x5f4c9,
+ 0x39a78f,
+ 0x2da904,
+ 0x20f345,
+ 0x2fee50,
+ 0x2959c7,
+ 0x20abc3,
+ 0x2842c8,
+ 0x1257c6,
+ 0x2b400a,
+ 0x200e84,
+ 0x2f2a03,
+ 0x2716c6,
+ 0x205bc2,
+ 0x26b44b,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x2f74c3,
+ 0x20d1c2,
+ 0x204ac3,
+ 0x200383,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x200383,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x205d83,
+ 0x223103,
+ 0x200383,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x231b83,
+ 0x204ac3,
+ 0x200383,
+ 0x204cc2,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x24ae04,
+ 0x2d0783,
+ 0x231b83,
+ 0x222044,
+ 0x204ac3,
+ 0x200383,
+ 0x15f048,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x2d0783,
+ 0x231b83,
+ 0x2135c3,
+ 0x209e43,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x15f048,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x262fc3,
+ 0x1e303,
+ 0x5d83,
+ 0x204ac3,
+ 0x200383,
+ 0x310c8a,
+ 0x32a949,
+ 0x34184b,
+ 0x341f8a,
+ 0x347d0a,
+ 0x356e8b,
+ 0x37300a,
+ 0x37914a,
+ 0x37e80a,
+ 0x37ea8b,
+ 0x39d949,
+ 0x39f84a,
+ 0x39fbcb,
+ 0x3a9d0b,
+ 0x3b4a8a,
+ 0x2d0783,
+ 0x231b83,
+ 0x2135c3,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x10c9c9,
+ 0x15f048,
+ 0x2d0783,
+ 0x2695c4,
+ 0x200c82,
+ 0x213184,
+ 0x3ac705,
+ 0x205283,
+ 0x24ae04,
+ 0x2d0783,
+ 0x23a184,
+ 0x231b83,
+ 0x251304,
+ 0x2da904,
+ 0x2964c4,
+ 0x22d603,
+ 0x204ac3,
+ 0x200383,
+ 0x293ac5,
+ 0x209103,
+ 0x21aa03,
+ 0x22c6c3,
+ 0x258a04,
+ 0x262904,
+ 0x35d705,
+ 0x15f048,
+ 0x306e44,
+ 0x20e546,
+ 0x28a8c4,
+ 0x20d1c2,
+ 0x361ac7,
+ 0x253587,
+ 0x24f0c4,
+ 0x25d8c5,
+ 0x2d1d45,
+ 0x2b0405,
+ 0x2964c4,
+ 0x23cfc8,
+ 0x33f306,
+ 0x311f48,
+ 0x227b05,
+ 0x2e0405,
+ 0x377004,
+ 0x200383,
+ 0x2f39c4,
+ 0x355f46,
+ 0x2717c3,
+ 0x258a04,
+ 0x291a45,
+ 0x363644,
+ 0x234e84,
+ 0x205bc2,
+ 0x25e206,
+ 0x392206,
+ 0x3022c5,
+ 0x204cc2,
+ 0x368883,
+ 0x24e0d1c2,
+ 0x232dc4,
+ 0x208a42,
+ 0x20fbc3,
+ 0x25e402,
+ 0x204ac3,
+ 0x200382,
+ 0x213e83,
+ 0x24abc3,
+ 0x15f048,
+ 0x15f048,
+ 0x332ec3,
+ 0x204cc2,
+ 0x25a0d1c2,
+ 0x332ec3,
+ 0x2702c3,
+ 0x23a0c3,
+ 0x32bc44,
+ 0x204ac3,
+ 0x200383,
+ 0x15f048,
+ 0x204cc2,
+ 0x2620d1c2,
+ 0x2d0783,
+ 0x204ac3,
+ 0x200383,
+ 0x682,
+ 0x2044c2,
+ 0x217082,
+ 0x205d83,
+ 0x2ec383,
+ 0x204cc2,
+ 0x15f048,
+ 0x13ecc7,
+ 0x20d1c2,
+ 0x231b83,
+ 0x251304,
+ 0x202743,
+ 0x332ec3,
+ 0x209e43,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x2183c3,
+ 0x200383,
+ 0x21d743,
+ 0x1286d3,
+ 0x12cb54,
+ 0x13ecc7,
+ 0x1fd86,
+ 0x5ae0b,
+ 0x28b86,
+ 0x58c07,
+ 0x130089,
+ 0xe9cca,
+ 0x8cb0d,
+ 0x16978c,
+ 0x13d64a,
+ 0x63c85,
+ 0xa588,
+ 0x177ac6,
+ 0x125886,
+ 0x201742,
+ 0x827cc,
+ 0x19a347,
+ 0x23551,
+ 0x2d0783,
+ 0x5f245,
+ 0x102c4,
+ 0x274341c6,
+ 0x19146,
+ 0x178146,
+ 0x920ca,
+ 0xb2f03,
+ 0x27a5c984,
+ 0x130045,
+ 0xa383,
+ 0xd2b8c,
+ 0xf6188,
+ 0xbaf48,
+ 0xa3bc9,
+ 0x20c48,
+ 0x141dd06,
+ 0xfbc88,
+ 0x5e884,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x204cc2,
+ 0x20d1c2,
+ 0x332ec3,
+ 0x20a3c2,
+ 0x204ac3,
+ 0x200383,
+ 0x213e83,
+ 0x36388f,
+ 0x363c4e,
+ 0x15f048,
+ 0x2d0783,
+ 0x4cd07,
+ 0x231b83,
+ 0x332ec3,
+ 0x204303,
+ 0x204ac3,
+ 0x200383,
+ 0x21d0c3,
+ 0x239c47,
+ 0x200142,
+ 0x2c1949,
+ 0x201442,
+ 0x23f68b,
+ 0x2b5b8a,
+ 0x2bcfc9,
+ 0x200282,
+ 0x262b46,
+ 0x26d615,
+ 0x23f7d5,
+ 0x274a13,
+ 0x23fd53,
+ 0x202342,
+ 0x20d605,
+ 0x3ab1cc,
+ 0x24698b,
+ 0x29a745,
+ 0x205ac2,
+ 0x289c02,
+ 0x386746,
+ 0x200f82,
+ 0x25fb86,
+ 0x294d0d,
+ 0x255dcc,
+ 0x224444,
+ 0x201342,
+ 0x203782,
+ 0x248688,
+ 0x202302,
+ 0x208886,
+ 0x303bc4,
+ 0x26d7d5,
+ 0x274b93,
+ 0x210b83,
+ 0x33070a,
+ 0x2f0187,
+ 0x3b2209,
+ 0x32dc47,
+ 0x3124c2,
0x200002,
- 0x200006,
- 0x202f42,
- 0x880c8,
- 0x211302,
- 0x211d42,
- 0x273cc7,
- 0x3a8ac7,
- 0x21ed05,
- 0x215802,
- 0x220647,
- 0x220808,
- 0x279a82,
- 0x293f02,
- 0x22f802,
- 0x202ec2,
- 0x239c48,
- 0x21abc3,
- 0x267848,
- 0x2cf4cd,
- 0x215743,
- 0x369908,
- 0x234a4f,
- 0x234e0e,
- 0x223f8a,
- 0x36a611,
- 0x36aa90,
- 0x2b348d,
- 0x2b37cc,
- 0x3b2447,
- 0x348807,
- 0x355409,
- 0x23c302,
- 0x2004c2,
- 0x254c8c,
- 0x254f8b,
- 0x2008c2,
- 0x2dca86,
- 0x206c02,
- 0x2131c2,
- 0x21dec2,
- 0x216582,
- 0x392904,
- 0x23b147,
+ 0x3a4386,
+ 0x20a0c2,
+ 0x15f048,
+ 0x200802,
+ 0x211cc2,
+ 0x27d407,
+ 0x3b3507,
+ 0x21c7c5,
+ 0x201082,
+ 0x21d707,
+ 0x21d8c8,
+ 0x2413c2,
+ 0x2c2fc2,
+ 0x22c1c2,
+ 0x20e542,
+ 0x23b688,
+ 0x218443,
+ 0x2b72c8,
+ 0x2e078d,
+ 0x21fe43,
+ 0x226288,
+ 0x23e88f,
+ 0x23ec4e,
+ 0x24ac8a,
+ 0x229d11,
+ 0x22a190,
+ 0x2bf0cd,
+ 0x2bf40c,
+ 0x38c5c7,
+ 0x330887,
+ 0x3b30c9,
+ 0x204f02,
+ 0x200702,
+ 0x25a6cc,
+ 0x25a9cb,
+ 0x202ac2,
+ 0x2dcac6,
+ 0x20db42,
+ 0x20c502,
+ 0x21c402,
+ 0x20d1c2,
+ 0x384684,
+ 0x23c7c7,
+ 0x220802,
+ 0x242c07,
+ 0x243c47,
+ 0x2271c2,
+ 0x20e482,
+ 0x24cbc5,
+ 0x204d02,
+ 0x20cb4e,
+ 0x36f1cd,
+ 0x231b83,
+ 0x353a0e,
+ 0x2c0b8d,
+ 0x3ab643,
+ 0x201842,
+ 0x206744,
+ 0x208182,
+ 0x220a42,
+ 0x33e805,
+ 0x348447,
+ 0x372202,
+ 0x2041c2,
+ 0x250f07,
+ 0x2543c8,
+ 0x2abc02,
+ 0x2aa106,
+ 0x25a54c,
+ 0x25a88b,
+ 0x20da42,
+ 0x26588f,
+ 0x265c50,
+ 0x26604f,
+ 0x266415,
+ 0x266954,
+ 0x266e4e,
+ 0x2671ce,
+ 0x26754f,
+ 0x26790e,
+ 0x267c94,
+ 0x268193,
+ 0x26864d,
+ 0x27b549,
+ 0x28dbc3,
+ 0x200182,
+ 0x237b85,
+ 0x206506,
+ 0x208a42,
+ 0x21a2c7,
+ 0x332ec3,
+ 0x200642,
+ 0x36edc8,
+ 0x229f51,
+ 0x22a390,
0x200bc2,
- 0x23f1c7,
- 0x240447,
- 0x214ec2,
- 0x230542,
- 0x242885,
- 0x200682,
- 0x26380e,
- 0x27620d,
- 0x2343c3,
- 0x28268e,
- 0x356b8d,
- 0x2de803,
- 0x2058c2,
- 0x27cac4,
- 0x2446c2,
- 0x20ddc2,
- 0x346905,
- 0x34f587,
- 0x372642,
- 0x206ac2,
- 0x246cc7,
- 0x24c608,
- 0x23aa82,
- 0x2b5506,
- 0x254b0c,
- 0x254e4b,
- 0x221842,
- 0x25bccf,
- 0x25c090,
- 0x25c48f,
- 0x25c855,
- 0x25cd94,
- 0x25d28e,
- 0x25d60e,
- 0x25d98f,
- 0x25dd4e,
- 0x25e0d4,
- 0x25e5d3,
- 0x25ea8d,
- 0x271749,
- 0x286d43,
- 0x2007c2,
- 0x20a805,
- 0x208f46,
- 0x201f82,
- 0x26bdc7,
- 0x21eb03,
- 0x20b2c2,
- 0x2c7448,
- 0x36a851,
- 0x36ac90,
- 0x200942,
- 0x22a647,
- 0x2074c2,
- 0x3328c7,
- 0x209682,
- 0x305dc9,
- 0x3774c7,
- 0x3615c8,
- 0x228246,
- 0x2daf83,
- 0x34ad45,
- 0x234642,
- 0x200402,
- 0x200405,
- 0x399485,
- 0x202102,
- 0x24a503,
- 0x2cfc47,
- 0x208a07,
- 0x203f42,
- 0x2fec04,
- 0x214803,
- 0x2be489,
- 0x2db488,
- 0x20b402,
- 0x2061c2,
- 0x22f2c7,
- 0x24bcc5,
- 0x2a5f88,
- 0x3b0e87,
- 0x2047c3,
- 0x27df86,
- 0x2b330d,
- 0x2b368c,
- 0x276a06,
- 0x203142,
- 0x29a1c2,
- 0x206742,
- 0x2348cf,
- 0x234cce,
- 0x2d3847,
- 0x200342,
- 0x39e205,
- 0x39e206,
- 0x250042,
- 0x203042,
- 0x217c86,
- 0x2a9a83,
- 0x332806,
- 0x2bfb05,
- 0x2bfb0d,
- 0x2c00d5,
- 0x2c0c0c,
- 0x2c150d,
- 0x2c18d2,
- 0x20e842,
+ 0x28d387,
+ 0x200b02,
+ 0x205fc7,
+ 0x201b02,
+ 0x32f249,
+ 0x386707,
+ 0x281408,
+ 0x234006,
+ 0x2cf4c3,
+ 0x2cf4c5,
+ 0x231e02,
+ 0x204842,
+ 0x3a4785,
+ 0x376e05,
+ 0x205e82,
+ 0x245f43,
+ 0x3636c7,
+ 0x210687,
+ 0x204982,
+ 0x3aae04,
+ 0x214183,
+ 0x2c9209,
+ 0x2ed188,
+ 0x205d82,
+ 0x2032c2,
+ 0x26e2c7,
+ 0x282185,
+ 0x2ab548,
+ 0x20d2c7,
+ 0x216143,
+ 0x372306,
+ 0x2bef4d,
+ 0x2bf2cc,
+ 0x280346,
+ 0x208842,
+ 0x2017c2,
+ 0x201f02,
+ 0x23e70f,
+ 0x23eb0e,
+ 0x2d1dc7,
+ 0x203cc2,
+ 0x2c3345,
+ 0x2c3346,
+ 0x20bcc2,
+ 0x205f02,
+ 0x28f406,
+ 0x205f03,
+ 0x205f06,
+ 0x2ca585,
+ 0x2ca58d,
+ 0x2cab55,
+ 0x2cb38c,
+ 0x2cc28d,
+ 0x2cc652,
+ 0x20b602,
+ 0x273fc2,
+ 0x201302,
+ 0x240fc6,
+ 0x2fcf46,
+ 0x201002,
+ 0x206586,
+ 0x211f82,
+ 0x37edc5,
+ 0x202382,
+ 0x20cc89,
+ 0x2df2cc,
+ 0x2df60b,
+ 0x200382,
+ 0x255688,
+ 0x213a02,
+ 0x204c82,
+ 0x246746,
+ 0x36b005,
+ 0x235007,
+ 0x2567c5,
+ 0x294805,
+ 0x24cd82,
+ 0x20a642,
+ 0x217902,
+ 0x2f2847,
+ 0x24410d,
+ 0x24448c,
+ 0x2b3387,
+ 0x2aa082,
+ 0x23cf82,
+ 0x24ba48,
+ 0x2d0488,
+ 0x2e5f88,
+ 0x2f09c4,
+ 0x2dce87,
+ 0x2ee483,
+ 0x2b6042,
+ 0x200e82,
+ 0x2f11c9,
+ 0x395e87,
+ 0x2054c2,
+ 0x277245,
+ 0x201202,
+ 0x26a102,
+ 0x349c43,
+ 0x349c46,
+ 0x2f74c2,
+ 0x2f7fc2,
+ 0x201402,
+ 0x3b3fc6,
+ 0x206687,
+ 0x207842,
0x200e02,
- 0x200ac2,
- 0x2d6646,
- 0x2ac506,
- 0x2025c2,
- 0x208fc6,
+ 0x38bc8f,
+ 0x35384d,
+ 0x2b714e,
+ 0x2c0a0c,
+ 0x2003c2,
+ 0x205502,
+ 0x233e45,
+ 0x3b4e86,
+ 0x201ec2,
+ 0x200fc2,
+ 0x200682,
+ 0x20d244,
+ 0x2e0604,
+ 0x2d29c6,
+ 0x202602,
+ 0x27e787,
+ 0x22d703,
+ 0x22d708,
+ 0x24b048,
+ 0x390787,
+ 0x240ec6,
+ 0x20e5c2,
+ 0x23b383,
+ 0x23b387,
+ 0x272846,
+ 0x2e4385,
+ 0x2f0d48,
+ 0x206342,
+ 0x34a007,
+ 0x220c42,
+ 0x33c282,
+ 0x203b82,
+ 0x2dbe09,
+ 0x22fb02,
+ 0x200242,
+ 0x240183,
+ 0x319ac7,
+ 0x2018c2,
+ 0x2df44c,
+ 0x2df74b,
+ 0x2803c6,
+ 0x20a2c5,
+ 0x222e82,
+ 0x200a42,
+ 0x2bd306,
+ 0x235b83,
+ 0x39c147,
+ 0x23bb02,
0x203382,
- 0x2249c5,
- 0x204c02,
- 0x263949,
- 0x34700c,
- 0x34734b,
- 0x201502,
- 0x24ca48,
- 0x2042c2,
- 0x207a82,
- 0x219bc6,
- 0x36c005,
- 0x3a1687,
- 0x24a385,
- 0x28df05,
- 0x242a42,
- 0x202042,
- 0x206d42,
- 0x26e847,
- 0x2d094d,
- 0x2d0ccc,
- 0x2229c7,
- 0x2b5482,
- 0x226282,
- 0x36f088,
- 0x22ce88,
- 0x2d5b48,
- 0x2dfd44,
- 0x2ef207,
- 0x2dbf83,
- 0x280b82,
- 0x2014c2,
- 0x2e0489,
- 0x3a3247,
- 0x207442,
- 0x26d485,
- 0x241542,
- 0x22ff42,
- 0x297fc3,
- 0x297fc6,
- 0x2e6a82,
- 0x2e8642,
- 0x200c02,
- 0x30f006,
- 0x29dc87,
- 0x200b82,
- 0x208782,
- 0x26768f,
- 0x2824cd,
- 0x284d8e,
- 0x356a0c,
- 0x20d342,
- 0x207482,
- 0x228085,
- 0x3b3086,
- 0x212182,
- 0x208b02,
+ 0x26d495,
+ 0x23f995,
+ 0x2748d3,
+ 0x23fed3,
+ 0x2934c7,
+ 0x2b5948,
+ 0x2fb310,
+ 0x30ee4f,
+ 0x2b5953,
+ 0x2bcd92,
+ 0x2c1510,
+ 0x2ca1cf,
+ 0x2d57d2,
+ 0x2d84d1,
+ 0x2d9513,
+ 0x2dbbd2,
+ 0x2dd20f,
+ 0x2e57ce,
+ 0x2f5092,
+ 0x2f6351,
+ 0x2f754f,
+ 0x2f834e,
+ 0x300011,
+ 0x355810,
+ 0x35f212,
+ 0x3702d1,
+ 0x2f9bc6,
+ 0x307487,
+ 0x373387,
0x204b42,
- 0x282844,
- 0x2cf344,
- 0x338a86,
- 0x201bc2,
- 0x275247,
- 0x214343,
- 0x21cb88,
- 0x224348,
- 0x239247,
- 0x33fbc6,
- 0x2015c2,
- 0x239bc3,
- 0x35bf87,
- 0x266c86,
- 0x2d6585,
- 0x2d8e88,
- 0x208d82,
- 0x3211c7,
- 0x20dfc2,
- 0x35b202,
- 0x20ad82,
- 0x2bf8c9,
- 0x200242,
- 0x200a02,
- 0x222c43,
- 0x321887,
- 0x201a02,
- 0x34718c,
- 0x34748b,
- 0x276a86,
- 0x20cdc5,
- 0x224982,
- 0x206ec2,
- 0x2b3006,
- 0x229083,
- 0x340d07,
- 0x246002,
- 0x200cc2,
- 0x248e15,
- 0x32a415,
- 0x24dd53,
- 0x32a953,
- 0x264dc7,
- 0x288288,
- 0x288290,
- 0x289b0f,
- 0x28bf13,
- 0x2a3fd2,
- 0x2a9410,
- 0x2e79cf,
- 0x2f14d2,
- 0x351551,
- 0x2afb13,
- 0x2bf692,
- 0x2c8d0f,
- 0x2cb38e,
- 0x2cc152,
- 0x2cd191,
- 0x2cdd8f,
- 0x2ced4e,
- 0x2d4c11,
- 0x2e0090,
- 0x2e4452,
- 0x2e55d1,
- 0x2e6b06,
- 0x2e89c7,
- 0x2f77c7,
- 0x201582,
- 0x27a485,
- 0x2f2447,
- 0x221e42,
- 0x203c42,
- 0x22c605,
- 0x221303,
- 0x26e246,
- 0x2d0b0d,
- 0x2d0e4c,
- 0x203dc2,
- 0x27fdcb,
- 0x219cca,
- 0x31b28a,
- 0x2b22c9,
- 0x2dd20b,
- 0x3b0fcd,
- 0x2f2b4c,
- 0x2144ca,
- 0x221e8c,
- 0x24d10b,
- 0x268e4c,
- 0x26c10b,
- 0x346f83,
- 0x287e86,
- 0x326e82,
- 0x2e9202,
- 0x208943,
- 0x205882,
- 0x205883,
- 0x238406,
- 0x25ca07,
- 0x271406,
- 0x2ea8c8,
- 0x22cb88,
- 0x2f0206,
- 0x22d742,
- 0x2f508d,
- 0x2f53cc,
- 0x22d747,
- 0x2f8787,
- 0x2156c2,
- 0x21bf02,
- 0x21eb82,
- 0x24b982,
- 0x216582,
- 0x238483,
- 0x2264c3,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x211003,
- 0x212444,
- 0x238483,
- 0x2264c3,
- 0x217643,
- 0x200882,
- 0x200702,
- 0x2368c545,
- 0x23a03985,
- 0x23f0b146,
- 0x880c8,
- 0x242b0185,
- 0x216582,
- 0x201a42,
- 0x24755c45,
- 0x24a786c5,
- 0x24e79547,
- 0x2527b109,
- 0x2564b084,
- 0x201f82,
- 0x20b2c2,
- 0x25a43785,
- 0x25e8bb89,
- 0x26311f08,
- 0x266abe45,
- 0x26b0bc07,
- 0x26e18948,
- 0x272d8045,
- 0x27604606,
- 0x27b47b09,
- 0x27f25348,
- 0x282b8888,
- 0x2869310a,
- 0x28a48444,
- 0x28ec9405,
- 0x292b5dc8,
- 0x29616c85,
- 0x21ac42,
- 0x29a00343,
- 0x29ea2f86,
- 0x2a233a88,
- 0x2a69e2c6,
- 0x2aa9ddc8,
- 0x2ae09c86,
- 0x2b2f6284,
- 0x205902,
- 0x2b73b7c7,
- 0x2baa8444,
- 0x2be746c7,
- 0x2c333a07,
- 0x201502,
- 0x2c696ec5,
- 0x2ca31504,
- 0x2cf7fd07,
- 0x2d211e47,
- 0x2d67c906,
- 0x2da29585,
- 0x2de91bc7,
- 0x2e2d1a48,
- 0x2e60ab87,
- 0x2eb12b09,
- 0x2eec0f45,
- 0x2f32bb87,
- 0x2f68b886,
- 0x2fa51008,
- 0x225a4d,
- 0x242bc9,
- 0x2e4ccb,
- 0x3726cb,
- 0x26f30b,
- 0x2a564b,
- 0x2ffd0b,
- 0x2fffcb,
- 0x300849,
- 0x30208b,
- 0x30234b,
- 0x30290b,
- 0x30340a,
- 0x30394a,
- 0x303f4c,
- 0x308e0b,
- 0x30964a,
- 0x31c18a,
- 0x32734e,
- 0x3282ce,
- 0x32864a,
- 0x32b14a,
- 0x32cb4b,
- 0x32ce0b,
- 0x32dd0b,
- 0x34c50b,
- 0x34cb0a,
- 0x34d7cb,
- 0x34da8a,
- 0x34dd0a,
- 0x34df8a,
- 0x373f4b,
- 0x37c18b,
- 0x37dace,
- 0x37de4b,
- 0x3849cb,
- 0x38598b,
- 0x3893ca,
- 0x389649,
- 0x38988a,
- 0x38af0a,
- 0x39c60b,
- 0x39e64b,
- 0x39f24a,
- 0x3a02cb,
- 0x3a4f0b,
- 0x3b26cb,
- 0x2fe7ab48,
- 0x30285289,
- 0x30626809,
- 0x30acfe48,
- 0x338805,
- 0x203443,
- 0x204204,
- 0x327145,
- 0x24adc6,
- 0x259145,
- 0x284404,
- 0x26bcc8,
- 0x3739c5,
- 0x28d904,
- 0x3b3f87,
- 0x2996ca,
- 0x3605ca,
- 0x336947,
- 0x203347,
- 0x2f10c7,
- 0x362607,
- 0x2b9d05,
- 0x306d46,
- 0x2fb0c7,
- 0x3a2784,
- 0x376b06,
- 0x376a06,
- 0x3a3745,
- 0x280584,
- 0x2d3d46,
- 0x298387,
- 0x225d46,
- 0x2c7ec7,
- 0x28d6c3,
- 0x268446,
- 0x2328c5,
- 0x279647,
- 0x266fca,
- 0x263204,
- 0x2180c8,
- 0x2fb649,
- 0x2ce487,
- 0x3aed06,
- 0x29f988,
- 0x306409,
- 0x2e6244,
- 0x35d804,
- 0x2f9685,
- 0x2fadc8,
- 0x2bd1c7,
- 0x2aa009,
- 0x327c48,
- 0x2fc706,
- 0x379bc6,
- 0x2943c8,
- 0x375fc6,
- 0x203985,
- 0x27c9c6,
- 0x274bc8,
- 0x2347c6,
- 0x25708b,
- 0x233406,
- 0x295d4d,
- 0x358a45,
- 0x2a8306,
- 0x218a05,
- 0x297c89,
- 0x2f1d07,
- 0x382048,
- 0x2db2c6,
- 0x294ac9,
- 0x3a6246,
- 0x266f45,
- 0x29c1c6,
- 0x2a8e86,
- 0x2c2909,
- 0x306206,
- 0x279247,
- 0x33cf05,
- 0x205703,
- 0x257205,
- 0x296007,
- 0x323446,
- 0x358949,
- 0x30b146,
- 0x27cc06,
- 0x365389,
- 0x27c3c9,
- 0x29ca07,
- 0x369fc8,
- 0x39ee89,
- 0x27a108,
- 0x31f686,
- 0x2cc9c5,
- 0x30a44a,
- 0x27cc86,
- 0x330bc6,
- 0x2a3145,
- 0x24d588,
- 0x206847,
- 0x2318ca,
- 0x247786,
- 0x243005,
- 0x2a0e06,
- 0x265b47,
- 0x3aebc7,
- 0x2bacc5,
- 0x267105,
- 0x2acf46,
- 0x383446,
- 0x2ad886,
- 0x328cc4,
- 0x27b489,
- 0x286146,
- 0x2a5a0a,
- 0x214048,
- 0x32b888,
- 0x3605ca,
- 0x202145,
- 0x2982c5,
- 0x323c48,
- 0x2c9188,
- 0x320d47,
- 0x265146,
- 0x315308,
- 0x202b87,
- 0x279788,
- 0x35f146,
- 0x27dd08,
- 0x2b3b86,
- 0x2370c7,
- 0x295506,
- 0x2d3d46,
- 0x23628a,
- 0x392986,
- 0x2cc9c9,
- 0x2b0486,
- 0x2d238a,
- 0x2f6289,
- 0x2f0306,
- 0x37c504,
- 0x20a8cd,
- 0x285507,
- 0x317906,
- 0x2b8745,
- 0x3a62c5,
- 0x305546,
- 0x26d9c9,
- 0x3ad5c7,
- 0x275cc6,
- 0x2cd946,
- 0x284489,
- 0x212a44,
- 0x228dc4,
- 0x204308,
- 0x2387c6,
- 0x26d548,
- 0x2d6b88,
- 0x203ac7,
- 0x200849,
- 0x2ada87,
- 0x2b004a,
- 0x22decf,
- 0x2377ca,
- 0x227e85,
- 0x274e05,
- 0x216005,
+ 0x284e05,
+ 0x2febc7,
+ 0x217082,
+ 0x203142,
+ 0x2293c5,
+ 0x21ee43,
+ 0x35d986,
+ 0x2442cd,
+ 0x24460c,
+ 0x206602,
+ 0x3ab04b,
+ 0x24684a,
+ 0x30be4a,
+ 0x2bbf49,
+ 0x2ef68b,
+ 0x20d40d,
+ 0x2ff2cc,
+ 0x24890a,
+ 0x275b0c,
+ 0x27afcb,
+ 0x29a58c,
+ 0x2fa34b,
+ 0x2df243,
+ 0x35ee06,
+ 0x3a6502,
+ 0x2f8b82,
+ 0x2db2c3,
+ 0x202502,
+ 0x202503,
+ 0x245886,
+ 0x2665c7,
+ 0x365146,
+ 0x385cc8,
+ 0x2d0188,
+ 0x2d3186,
+ 0x2019c2,
+ 0x301c8d,
+ 0x301fcc,
+ 0x2da9c7,
+ 0x306d07,
+ 0x21fdc2,
+ 0x21ac02,
+ 0x23b302,
+ 0x254782,
+ 0x20d1c2,
+ 0x204ac3,
+ 0x200383,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x213184,
+ 0x204ac3,
+ 0x200383,
+ 0x213e83,
+ 0x204cc2,
+ 0x204e02,
+ 0x29a94005,
+ 0x29e02e85,
+ 0x2a3177c6,
+ 0x15f048,
+ 0x2a6b5145,
+ 0x20d1c2,
+ 0x2000c2,
+ 0x2ab9c685,
+ 0x2ae83305,
+ 0x2b283e07,
+ 0x2b68b309,
+ 0x2ba47ac4,
+ 0x208a42,
+ 0x200642,
+ 0x2bf72245,
+ 0x2c293149,
+ 0x2c71db88,
+ 0x2cab2085,
+ 0x2cf363c7,
+ 0x2d219b08,
+ 0x2d6e8605,
+ 0x2da5b4c6,
+ 0x2de346c9,
+ 0x2e2b8648,
+ 0x2e6c4b48,
+ 0x2ea9cf0a,
+ 0x2ee52104,
+ 0x2f2d6585,
+ 0x2f6becc8,
+ 0x2fb51245,
+ 0x2184c2,
+ 0x2fe63b83,
+ 0x302a7786,
+ 0x3064ea48,
+ 0x30a24f06,
+ 0x30ecec88,
+ 0x3132d1c6,
+ 0x316e4444,
+ 0x202082,
+ 0x31b630c7,
+ 0x31eaeb84,
+ 0x3227dc47,
+ 0x327a1087,
+ 0x200382,
+ 0x32aa0685,
+ 0x32e03bc4,
+ 0x332d1807,
+ 0x3362adc7,
+ 0x33a87406,
+ 0x33e36085,
+ 0x3429b807,
+ 0x346d2688,
+ 0x34a37f07,
+ 0x34eb0689,
+ 0x3538e6c5,
+ 0x35719c07,
+ 0x35a92e46,
+ 0x35e62d48,
+ 0x2460cd,
+ 0x24cf09,
+ 0x2f484b,
+ 0x25534b,
+ 0x27de4b,
+ 0x2aa88b,
+ 0x30f20b,
+ 0x30f4cb,
+ 0x30fd49,
+ 0x310f0b,
+ 0x3111cb,
+ 0x311ccb,
+ 0x31284a,
+ 0x312d8a,
+ 0x31338c,
+ 0x31608b,
+ 0x3166ca,
+ 0x327eca,
+ 0x3328ce,
+ 0x333a4e,
+ 0x333dca,
+ 0x335d8a,
+ 0x3369cb,
+ 0x336c8b,
+ 0x337a4b,
+ 0x34c7cb,
+ 0x34cdca,
+ 0x34da8b,
+ 0x34dd4a,
+ 0x34dfca,
+ 0x34e24a,
+ 0x373ecb,
+ 0x37a2cb,
+ 0x37c38e,
+ 0x37c70b,
+ 0x383ecb,
+ 0x38500b,
+ 0x38984a,
+ 0x389ac9,
+ 0x389d0a,
+ 0x38b38a,
+ 0x39e50b,
+ 0x39fe8b,
+ 0x3a09ca,
+ 0x3a28cb,
+ 0x3a588b,
+ 0x3b44cb,
+ 0x36285b88,
+ 0x3668c289,
+ 0x36aa3a49,
+ 0x36ee0bc8,
+ 0x33c685,
+ 0x202943,
+ 0x212944,
+ 0x206885,
+ 0x247806,
+ 0x25b245,
+ 0x28adc4,
+ 0x21a1c8,
+ 0x30af85,
+ 0x297a44,
+ 0x209907,
+ 0x2a280a,
+ 0x361d8a,
+ 0x3101c7,
+ 0x211f47,
+ 0x2fdec7,
+ 0x255b47,
+ 0x2fad45,
+ 0x343d06,
+ 0x22cb47,
+ 0x26fec4,
+ 0x2e6b46,
+ 0x2e6a46,
+ 0x208305,
+ 0x3492c4,
+ 0x38ec86,
+ 0x2a1647,
+ 0x22d046,
+ 0x351b47,
+ 0x26a783,
+ 0x2b4846,
+ 0x232045,
+ 0x283f07,
+ 0x270e0a,
+ 0x26dfc4,
+ 0x218ec8,
+ 0x2affc9,
+ 0x2cb147,
+ 0x334646,
+ 0x255908,
+ 0x200a49,
+ 0x3b23c4,
+ 0x2210c4,
+ 0x278285,
+ 0x22c848,
+ 0x2c7f47,
+ 0x2a7109,
+ 0x2f9cc8,
+ 0x347a86,
+ 0x24c646,
+ 0x29de88,
+ 0x354c46,
+ 0x202e85,
+ 0x2874c6,
+ 0x27e108,
+ 0x254b86,
+ 0x25d14b,
+ 0x29dac6,
+ 0x29f50d,
+ 0x3b1785,
+ 0x2aea46,
+ 0x20f505,
+ 0x349909,
+ 0x2abe87,
+ 0x3195c8,
+ 0x292986,
+ 0x29e709,
+ 0x364546,
+ 0x270d85,
+ 0x2a4dc6,
+ 0x2c99c6,
+ 0x2cdb89,
+ 0x200846,
+ 0x253087,
+ 0x277885,
+ 0x202383,
+ 0x25d2c5,
+ 0x29f7c7,
+ 0x358e06,
+ 0x3b1689,
+ 0x3177c6,
+ 0x287706,
+ 0x215ec9,
+ 0x286ec9,
+ 0x2a5607,
+ 0x2cf688,
+ 0x377f89,
+ 0x284a88,
+ 0x379386,
+ 0x2d9dc5,
+ 0x23cb4a,
+ 0x287786,
+ 0x3a8506,
+ 0x2cbbc5,
+ 0x272188,
+ 0x215587,
+ 0x22e68a,
+ 0x251746,
+ 0x24d345,
+ 0x329cc6,
+ 0x2d6347,
0x334507,
- 0x277283,
- 0x36a1c8,
- 0x334d86,
- 0x334e89,
- 0x2c6a06,
- 0x2c2747,
- 0x294889,
- 0x381f48,
- 0x2a3207,
- 0x2fee83,
- 0x338885,
- 0x3b2005,
- 0x328b0b,
- 0x216d44,
- 0x2c5044,
- 0x273486,
- 0x2ff447,
- 0x39794a,
- 0x245807,
- 0x3b0407,
- 0x2786c5,
- 0x205285,
- 0x2196c9,
- 0x2d3d46,
- 0x24568d,
- 0x358045,
- 0x2a2d43,
- 0x205d03,
- 0x349205,
- 0x350005,
- 0x29f988,
- 0x276707,
- 0x228b46,
- 0x29a646,
- 0x22d905,
- 0x234687,
- 0x2035c7,
- 0x36ec47,
- 0x2c948a,
- 0x268508,
- 0x328cc4,
- 0x2ade47,
- 0x277cc7,
- 0x32d086,
- 0x264607,
- 0x2b2a08,
- 0x226708,
- 0x26b786,
- 0x367f08,
- 0x2c32c4,
- 0x2fb0c6,
- 0x3a9146,
- 0x2c0a86,
- 0x349c06,
- 0x29abc4,
- 0x3626c6,
- 0x2b76c6,
- 0x293606,
- 0x2293c6,
- 0x205bc6,
- 0x2b2846,
- 0x228a48,
- 0x39de08,
- 0x2c9cc8,
- 0x259348,
- 0x323bc6,
- 0x210785,
- 0x275386,
- 0x2abec5,
- 0x388807,
- 0x28ae45,
- 0x213d43,
- 0x364605,
- 0x22fd84,
- 0x205d05,
- 0x210143,
- 0x39a7c7,
- 0x31c448,
- 0x2c7f86,
- 0x2c514d,
- 0x274dc6,
- 0x292b85,
- 0x2afd43,
- 0x2b5789,
- 0x212bc6,
- 0x231246,
- 0x29c2c4,
- 0x237747,
- 0x235b06,
- 0x243245,
- 0x216ec3,
- 0x378a44,
- 0x277e86,
- 0x2b15c4,
- 0x30d748,
- 0x324a89,
- 0x2f2209,
- 0x29c0ca,
- 0x23f88d,
- 0x29da47,
- 0x330a46,
- 0x20ec44,
- 0x27b109,
- 0x283588,
- 0x285106,
- 0x263bc6,
- 0x264607,
- 0x2c3c06,
- 0x21b606,
- 0x38c346,
- 0x333a8a,
- 0x218948,
- 0x22bc45,
- 0x27d649,
- 0x279c8a,
- 0x2c54c8,
- 0x2979c8,
- 0x292108,
- 0x2a864c,
- 0x2dc7c5,
- 0x29a8c8,
- 0x39e106,
- 0x2d1d06,
- 0x37af07,
- 0x245705,
- 0x27cb45,
- 0x2f20c9,
- 0x212747,
- 0x2b2ec5,
- 0x21e9c7,
- 0x205d03,
- 0x2bd705,
- 0x366548,
- 0x2d1687,
- 0x297889,
- 0x2d7985,
- 0x2f4504,
- 0x2a1788,
- 0x2cf787,
- 0x2a33c8,
- 0x2740c8,
- 0x32c005,
- 0x334c86,
- 0x257706,
- 0x2e7649,
- 0x315b87,
- 0x2ac986,
- 0x30e947,
- 0x217d43,
- 0x24b084,
- 0x298c45,
- 0x2ae0c4,
- 0x236844,
- 0x27adc7,
- 0x3affc7,
- 0x239a04,
- 0x2976d0,
- 0x3056c7,
- 0x205285,
- 0x22ae8c,
- 0x2018c4,
- 0x2bee08,
- 0x236fc9,
- 0x2ffb86,
- 0x2a03c8,
- 0x25a7c4,
- 0x25a7c8,
- 0x231ec6,
- 0x229248,
- 0x298946,
- 0x2c828b,
- 0x205705,
- 0x2c3248,
- 0x21a3c4,
- 0x27c04a,
- 0x297889,
- 0x2e0d06,
- 0x2160c8,
- 0x258645,
- 0x301944,
- 0x2bed06,
- 0x36eb08,
- 0x27ab48,
- 0x345d06,
- 0x31d6c4,
- 0x30a3c6,
- 0x2adb07,
- 0x2745c7,
- 0x26460f,
- 0x2074c7,
- 0x2f03c7,
- 0x2d1bc5,
- 0x2ed845,
- 0x29c6c9,
- 0x28ae86,
- 0x278fc5,
- 0x27c6c7,
- 0x37b188,
- 0x293705,
- 0x295506,
- 0x213e88,
- 0x29e2ca,
- 0x282988,
- 0x287947,
- 0x22e306,
- 0x27d606,
- 0x21f283,
- 0x2042c3,
- 0x279e49,
- 0x39ed09,
- 0x2bec06,
- 0x2d7985,
- 0x2a84c8,
- 0x2160c8,
- 0x387808,
- 0x38c3cb,
- 0x2c5387,
- 0x2fd189,
- 0x264888,
- 0x33c7c4,
- 0x2c2a08,
- 0x2895c9,
- 0x2acc85,
- 0x334407,
- 0x24b105,
- 0x27aa48,
- 0x28c3cb,
- 0x291910,
- 0x2a8105,
- 0x21a30c,
- 0x228d05,
- 0x2032c3,
- 0x2a2c06,
- 0x2b6e04,
- 0x231606,
- 0x298387,
- 0x213f04,
- 0x2415c8,
- 0x36a08d,
- 0x2d9685,
- 0x23fd84,
- 0x219904,
- 0x27d0c9,
- 0x297408,
- 0x30afc7,
- 0x231f48,
- 0x27b548,
- 0x275fc5,
- 0x331547,
- 0x275f47,
- 0x20af07,
- 0x267109,
- 0x235989,
- 0x23f346,
- 0x2b39c6,
- 0x264846,
- 0x25b8c5,
- 0x3af344,
- 0x204506,
- 0x204a46,
- 0x276008,
- 0x26580b,
- 0x2630c7,
- 0x20ec44,
- 0x317d86,
- 0x203107,
- 0x348b45,
- 0x318f05,
- 0x201e84,
- 0x235906,
- 0x204588,
- 0x27b109,
- 0x257c86,
- 0x282f08,
- 0x243306,
- 0x33ce48,
- 0x2d8a8c,
- 0x275e86,
- 0x29284d,
- 0x292ccb,
- 0x279305,
- 0x203707,
- 0x306306,
- 0x3aea88,
- 0x23f3c9,
- 0x2e7288,
- 0x205285,
- 0x2ecc07,
- 0x27a208,
- 0x384789,
- 0x2a05c6,
- 0x33bfca,
- 0x3ae808,
- 0x2e70cb,
- 0x2c608c,
- 0x25a8c8,
- 0x277506,
- 0x334708,
- 0x29df47,
- 0x2cfa09,
- 0x28ba8d,
- 0x2961c6,
- 0x3017c8,
- 0x39dcc9,
- 0x2b6188,
- 0x27de08,
- 0x2b7f8c,
- 0x2b9347,
- 0x2b9f07,
- 0x266f45,
- 0x3a4d47,
- 0x37b048,
- 0x2bed86,
- 0x257b0c,
- 0x2e4988,
- 0x2c44c8,
- 0x24b5c6,
- 0x3b1d87,
- 0x23f544,
- 0x259348,
- 0x356e4c,
- 0x3a1a0c,
- 0x227f05,
- 0x393d47,
- 0x31d646,
- 0x3b1d06,
- 0x297e48,
- 0x38c284,
- 0x225d4b,
- 0x22844b,
- 0x22e306,
- 0x369f07,
- 0x307d45,
- 0x26ca85,
- 0x225e86,
- 0x258605,
- 0x216d05,
- 0x3accc7,
- 0x273a89,
- 0x233504,
- 0x2722c5,
- 0x2d7645,
- 0x254448,
- 0x22b4c5,
- 0x2a7809,
- 0x2af2c7,
- 0x2af2cb,
- 0x2d1046,
- 0x228789,
- 0x2804c8,
- 0x271c05,
- 0x20b008,
- 0x2359c8,
- 0x207ec7,
- 0x27d4c7,
- 0x27ae49,
- 0x229187,
- 0x32d3c9,
- 0x2aaf4c,
- 0x312a08,
- 0x2b9b49,
- 0x2be7c7,
- 0x27b609,
- 0x3b0107,
- 0x2c6188,
- 0x3afac5,
- 0x2fb046,
- 0x2b8788,
- 0x2f8b88,
- 0x279b49,
- 0x216d47,
- 0x26cb45,
- 0x20e3c9,
- 0x2c4086,
- 0x28b884,
- 0x2e6f46,
- 0x233908,
- 0x2426c7,
- 0x265a08,
- 0x367fc9,
- 0x261a47,
- 0x299886,
- 0x2037c4,
- 0x364689,
- 0x3313c8,
- 0x24b487,
- 0x306e46,
- 0x3b20c6,
- 0x330b44,
+ 0x2c4145,
+ 0x270f45,
+ 0x2b2f86,
+ 0x351746,
+ 0x387046,
+ 0x2b8bc4,
+ 0x286209,
+ 0x28d146,
+ 0x30e50a,
+ 0x222848,
+ 0x309148,
+ 0x361d8a,
+ 0x2145c5,
+ 0x2a1585,
+ 0x37f588,
+ 0x2b6348,
+ 0x21b507,
+ 0x293846,
+ 0x320d48,
+ 0x3674c7,
+ 0x285188,
+ 0x2b9206,
+ 0x2885c8,
+ 0x29ad46,
+ 0x227c87,
+ 0x272b06,
+ 0x38ec86,
+ 0x25d9ca,
+ 0x384706,
+ 0x2d9dc9,
+ 0x2b5446,
+ 0x2e3d8a,
+ 0x2e4449,
+ 0x362586,
+ 0x2ba844,
+ 0x237c4d,
+ 0x28c507,
+ 0x3268c6,
+ 0x2c4a05,
+ 0x3645c5,
+ 0x375846,
+ 0x2d1649,
+ 0x2b4287,
0x27f886,
- 0x205c83,
- 0x308149,
- 0x2056c6,
- 0x2a61c5,
- 0x29a646,
- 0x2a3505,
- 0x27a688,
- 0x25a607,
- 0x362446,
- 0x355c86,
- 0x32b888,
- 0x29c847,
- 0x296205,
- 0x29ab48,
- 0x39ea48,
- 0x3ae808,
- 0x228bc5,
- 0x2fb0c6,
- 0x2f1fc9,
- 0x257584,
- 0x3760cb,
- 0x21b30b,
- 0x22bb49,
- 0x205d03,
- 0x256385,
- 0x205986,
- 0x229908,
- 0x22de44,
- 0x2c7f86,
- 0x2c95c9,
- 0x2c5b05,
- 0x3acc06,
- 0x2cf786,
- 0x2160c4,
- 0x2a1b4a,
- 0x2a6108,
- 0x2f8b86,
- 0x368a05,
- 0x204887,
- 0x301547,
- 0x334c84,
- 0x21b547,
- 0x2b0044,
- 0x2c0a06,
- 0x202e03,
- 0x267105,
- 0x373445,
- 0x207708,
- 0x2ae005,
- 0x275bc9,
- 0x259187,
- 0x25918b,
- 0x2a2d8c,
- 0x2a3a0a,
- 0x30bc07,
- 0x200a83,
- 0x2d3948,
- 0x228d85,
- 0x293785,
- 0x338944,
- 0x2c6086,
- 0x236fc6,
- 0x27f8c7,
- 0x3656cb,
- 0x29abc4,
- 0x3821c4,
- 0x26b904,
- 0x2c25c6,
- 0x213f04,
- 0x2faec8,
- 0x338745,
- 0x23fec5,
- 0x387747,
- 0x203809,
- 0x350005,
- 0x375a4a,
- 0x37b2c9,
- 0x290f8a,
- 0x333bc9,
- 0x353144,
- 0x2cda05,
- 0x2c3d08,
- 0x37fdcb,
- 0x2f9685,
- 0x38d4c6,
- 0x2159c4,
- 0x276106,
- 0x2618c9,
- 0x317e47,
- 0x30b308,
- 0x23fc06,
- 0x2ada87,
- 0x27ab48,
- 0x38f586,
- 0x280204,
- 0x35eb87,
- 0x34e905,
- 0x360c07,
- 0x204604,
- 0x306286,
- 0x218bc8,
- 0x292e88,
- 0x3a4ac7,
- 0x217d88,
- 0x2b3c45,
- 0x205b44,
- 0x3604c8,
- 0x217e84,
- 0x207ec5,
- 0x2ed984,
- 0x202c87,
- 0x286207,
- 0x27b748,
- 0x2a3546,
- 0x2adf85,
- 0x2759c8,
- 0x282b88,
- 0x29c009,
- 0x21b606,
- 0x231948,
- 0x27beca,
- 0x348bc8,
- 0x2d8045,
- 0x275586,
- 0x26d888,
- 0x2eccca,
- 0x341107,
- 0x283985,
- 0x28ef48,
- 0x2b1184,
- 0x24d606,
- 0x2ba688,
- 0x205bc6,
- 0x380dc8,
- 0x2573c7,
- 0x3b3e86,
- 0x37c504,
- 0x29ce07,
- 0x2fac04,
- 0x261887,
- 0x23108d,
- 0x22bbc5,
- 0x2d148b,
- 0x298a46,
- 0x24cb48,
- 0x241584,
- 0x272086,
- 0x277e86,
- 0x334a47,
- 0x29250d,
- 0x25fd07,
- 0x300248,
- 0x29fb05,
- 0x284008,
- 0x2bd146,
- 0x2b3cc8,
- 0x20e886,
- 0x367707,
- 0x368189,
- 0x33f9c7,
- 0x2853c8,
- 0x26f705,
- 0x21ed88,
- 0x3b1c45,
- 0x23b2c5,
- 0x333e45,
- 0x226743,
- 0x27ca44,
- 0x27d645,
- 0x347b09,
- 0x31b646,
- 0x2b2b08,
- 0x2ecec5,
- 0x312447,
- 0x249dca,
- 0x3acb49,
- 0x2a8d8a,
- 0x2c9d48,
- 0x21e80c,
- 0x27c74d,
- 0x2f86c3,
- 0x380cc8,
- 0x378a05,
- 0x29e086,
- 0x381dc6,
- 0x2e3985,
- 0x30ea49,
- 0x310045,
- 0x2759c8,
- 0x279146,
- 0x33f4c6,
- 0x2a1649,
- 0x38ed87,
- 0x28c686,
- 0x249d48,
- 0x2c0988,
- 0x2d0047,
- 0x2293ce,
- 0x2bd385,
- 0x384685,
- 0x205ac8,
- 0x322d07,
- 0x214782,
- 0x2b7b04,
- 0x23150a,
- 0x24b548,
- 0x203206,
- 0x2949c8,
- 0x257706,
- 0x335988,
- 0x2ac988,
- 0x23b284,
- 0x328945,
- 0x683c04,
- 0x683c04,
- 0x683c04,
- 0x203983,
- 0x3b1f46,
- 0x275e86,
- 0x29924c,
- 0x205b03,
- 0x279c86,
- 0x213f84,
- 0x212b48,
- 0x2c9405,
- 0x231606,
- 0x2b5ec8,
- 0x2cb0c6,
- 0x3623c6,
- 0x29f788,
- 0x298cc7,
- 0x228f49,
- 0x2e96ca,
- 0x20abc4,
- 0x28ae45,
- 0x2a9fc5,
- 0x2128c6,
- 0x29da86,
- 0x299c86,
- 0x2ec386,
- 0x229084,
- 0x22908b,
- 0x233904,
- 0x204905,
- 0x2ab5c5,
- 0x203b86,
- 0x359288,
- 0x27c607,
- 0x30b0c4,
- 0x259cc3,
- 0x2b0c85,
- 0x2e6e07,
- 0x2a4449,
- 0x27c50b,
- 0x27f8c7,
- 0x207607,
- 0x2b5dc8,
- 0x312587,
- 0x2a4686,
- 0x242e88,
- 0x299e8b,
- 0x327086,
- 0x213a89,
- 0x29a005,
- 0x2fee83,
- 0x3acc06,
- 0x2572c8,
- 0x20e943,
- 0x2e6f03,
- 0x27ab46,
- 0x257706,
- 0x38ac8a,
- 0x277545,
- 0x277ccb,
- 0x29a58b,
- 0x240a03,
- 0x20f943,
- 0x2affc4,
- 0x367b47,
- 0x257344,
- 0x2039c4,
- 0x39df84,
- 0x348ec8,
- 0x368948,
- 0x30e389,
+ 0x2c9546,
+ 0x28ae49,
+ 0x264a04,
+ 0x2d4a44,
+ 0x3ac808,
+ 0x245c46,
+ 0x277308,
+ 0x2e66c8,
+ 0x202fc7,
+ 0x3a80c9,
+ 0x387247,
+ 0x2b500a,
+ 0x2498cf,
+ 0x250b0a,
+ 0x233c45,
+ 0x27e345,
+ 0x218745,
+ 0x303b07,
+ 0x20e183,
+ 0x2cf888,
+ 0x3028c6,
+ 0x3029c9,
+ 0x2d4006,
+ 0x3aeb47,
+ 0x29e4c9,
+ 0x3194c8,
+ 0x2cbc87,
+ 0x30d803,
+ 0x33c705,
+ 0x20e105,
+ 0x2b8a0b,
+ 0x351304,
+ 0x257984,
+ 0x27cbc6,
+ 0x30e887,
+ 0x38b10a,
+ 0x2757c7,
+ 0x38c807,
+ 0x283305,
+ 0x200045,
+ 0x240909,
+ 0x38ec86,
+ 0x27564d,
+ 0x35af05,
+ 0x29f4c3,
+ 0x20ad83,
+ 0x34f785,
+ 0x347845,
+ 0x255908,
+ 0x280047,
+ 0x2d47c6,
+ 0x2a36c6,
+ 0x2296c5,
+ 0x231e47,
+ 0x202ac7,
+ 0x33f1c7,
+ 0x2d660a,
+ 0x2b4908,
+ 0x2b8bc4,
+ 0x254907,
+ 0x281607,
+ 0x3400c6,
+ 0x26f8c7,
+ 0x2eaa08,
+ 0x2e9e88,
+ 0x2abd86,
+ 0x2d1ec8,
+ 0x2008c4,
+ 0x22cb46,
+ 0x247d86,
+ 0x216646,
+ 0x3a8c46,
+ 0x22d9c4,
+ 0x255c06,
+ 0x2c31c6,
+ 0x29d406,
+ 0x235ec6,
+ 0x20ac46,
+ 0x2ea846,
+ 0x2d46c8,
+ 0x3af1c8,
+ 0x2d6e48,
+ 0x25b448,
+ 0x37f506,
+ 0x212485,
+ 0x2e2006,
+ 0x2b2105,
+ 0x388c87,
+ 0x216605,
+ 0x2136c3,
+ 0x203ec5,
+ 0x33fb44,
+ 0x20ad85,
+ 0x2266c3,
+ 0x338007,
+ 0x34bc88,
+ 0x351c06,
+ 0x32250d,
+ 0x27e306,
+ 0x29c985,
+ 0x2d9743,
+ 0x2be689,
+ 0x264b86,
+ 0x23c0c6,
+ 0x2a4ec4,
+ 0x250a87,
+ 0x233006,
+ 0x2b4545,
+ 0x234a83,
+ 0x207ac4,
+ 0x2817c6,
+ 0x2ded04,
+ 0x32b8c8,
+ 0x39ba49,
+ 0x24d849,
+ 0x2a4cca,
+ 0x387acd,
+ 0x208d07,
+ 0x224bc6,
+ 0x20a684,
+ 0x28b309,
+ 0x28a088,
+ 0x28c106,
+ 0x23dfc6,
+ 0x26f8c7,
+ 0x2b9a46,
+ 0x21f706,
+ 0x3ac246,
+ 0x3a110a,
+ 0x219b08,
+ 0x2464c5,
+ 0x26fd09,
+ 0x28568a,
+ 0x2fa988,
+ 0x2a0ec8,
+ 0x29bd48,
+ 0x2af08c,
+ 0x316305,
+ 0x2a3948,
+ 0x2e8e06,
+ 0x319746,
+ 0x3aea07,
+ 0x2756c5,
+ 0x287645,
+ 0x24d709,
+ 0x213487,
+ 0x302985,
+ 0x227487,
+ 0x20ad83,
+ 0x2c8485,
+ 0x20b8c8,
+ 0x25d647,
+ 0x2a0d89,
+ 0x2de405,
+ 0x307784,
+ 0x2a6508,
+ 0x363207,
+ 0x2cbe48,
+ 0x368c48,
+ 0x2dc805,
+ 0x304286,
+ 0x278686,
+ 0x2ac1c9,
+ 0x31c407,
+ 0x2b29c6,
+ 0x3b3907,
+ 0x221d03,
+ 0x247ac4,
+ 0x2a7885,
+ 0x231f84,
+ 0x383c84,
+ 0x286947,
+ 0x35bdc7,
+ 0x27fa44,
+ 0x2a0bd0,
+ 0x367c87,
+ 0x200045,
+ 0x2536cc,
+ 0x225344,
+ 0x2b1588,
+ 0x227b89,
+ 0x2b4e06,
+ 0x220d88,
+ 0x247344,
+ 0x247348,
+ 0x22ec86,
+ 0x235d48,
+ 0x2a1c06,
+ 0x2d328b,
+ 0x202385,
+ 0x2cb988,
+ 0x216ac4,
+ 0x39be8a,
+ 0x2a0d89,
+ 0x381346,
+ 0x218808,
+ 0x25ebc5,
+ 0x2b69c4,
+ 0x2b1486,
+ 0x33f088,
+ 0x285b88,
+ 0x340bc6,
+ 0x31d104,
+ 0x23cac6,
+ 0x3872c7,
+ 0x27db47,
+ 0x26f8cf,
+ 0x205547,
+ 0x362647,
+ 0x38eb45,
+ 0x352245,
+ 0x2a52c9,
+ 0x30e1c6,
+ 0x284045,
+ 0x2871c7,
+ 0x2c1108,
+ 0x29d505,
+ 0x272b06,
+ 0x222688,
+ 0x224f0a,
+ 0x2e13c8,
+ 0x28f187,
+ 0x249d06,
+ 0x26fcc6,
+ 0x20df43,
+ 0x218303,
+ 0x285849,
+ 0x377e09,
+ 0x2b0586,
+ 0x2de405,
+ 0x2163c8,
+ 0x218808,
+ 0x354dc8,
+ 0x3ac2cb,
+ 0x322747,
+ 0x30b249,
+ 0x26fb48,
+ 0x335844,
+ 0x349588,
+ 0x291409,
+ 0x2b2cc5,
+ 0x303a07,
+ 0x247b45,
+ 0x285a88,
+ 0x293e8b,
+ 0x29b550,
+ 0x2ae605,
+ 0x216a0c,
+ 0x2d4985,
+ 0x283383,
+ 0x29f386,
+ 0x2c0984,
+ 0x203cc6,
+ 0x2a1647,
+ 0x222704,
+ 0x24b388,
+ 0x2cf74d,
+ 0x35e245,
+ 0x208d44,
+ 0x233984,
+ 0x287bc9,
+ 0x2990c8,
+ 0x317647,
+ 0x22ed08,
+ 0x2862c8,
+ 0x27fb85,
+ 0x20f747,
+ 0x27fb07,
+ 0x238287,
+ 0x270f49,
+ 0x232e89,
+ 0x242d86,
+ 0x2bf606,
+ 0x26fb06,
+ 0x289845,
+ 0x39b744,
+ 0x3b0e86,
+ 0x3b5306,
+ 0x27fbc8,
+ 0x2d600b,
+ 0x26de87,
+ 0x20a684,
+ 0x364a46,
+ 0x367a47,
+ 0x34f0c5,
+ 0x263645,
+ 0x212dc4,
+ 0x232e06,
+ 0x3b0f08,
+ 0x28b309,
+ 0x252f86,
+ 0x289a48,
+ 0x2b4606,
+ 0x342708,
+ 0x34c34c,
+ 0x27fa46,
+ 0x29c64d,
+ 0x29cacb,
+ 0x253145,
+ 0x202c07,
+ 0x200946,
+ 0x3343c8,
+ 0x242e09,
+ 0x393c88,
+ 0x200045,
+ 0x2e2a87,
+ 0x284b88,
+ 0x358649,
+ 0x344106,
+ 0x252e8a,
+ 0x334148,
+ 0x393acb,
+ 0x3298cc,
+ 0x247448,
+ 0x280e46,
+ 0x303d08,
+ 0x3a8347,
+ 0x363489,
+ 0x29304d,
+ 0x29f986,
+ 0x21e608,
+ 0x3af089,
+ 0x2bfd08,
+ 0x2886c8,
+ 0x2c3a0c,
+ 0x2c5047,
+ 0x2c5507,
+ 0x270d85,
+ 0x31e5c7,
0x2c0fc8,
- 0x3065c7,
- 0x2293c6,
- 0x2b274f,
- 0x2bd4c6,
- 0x2c9384,
- 0x36878a,
- 0x2e6d07,
- 0x3a37c6,
- 0x28b8c9,
- 0x30e305,
- 0x207845,
- 0x30e446,
- 0x21eec3,
- 0x2b11c9,
- 0x218ac6,
- 0x367d89,
- 0x397946,
- 0x267105,
- 0x228305,
- 0x2074c3,
- 0x367c88,
- 0x2df587,
- 0x334d84,
- 0x2129c8,
- 0x2d3ac4,
- 0x2d4646,
- 0x2a2c06,
- 0x23e7c6,
- 0x2c3109,
- 0x293705,
- 0x2d3d46,
- 0x264ac9,
- 0x3ac846,
- 0x2b2846,
- 0x387c46,
- 0x2119c5,
- 0x2ed986,
- 0x367704,
- 0x3afac5,
- 0x2b8784,
- 0x309246,
- 0x358004,
- 0x202c83,
- 0x283645,
- 0x2356c8,
- 0x21e007,
- 0x2b4549,
- 0x283888,
- 0x294191,
- 0x2cf80a,
- 0x22e247,
- 0x2ee8c6,
- 0x213f84,
- 0x2b8888,
- 0x239748,
- 0x29434a,
- 0x2a75cd,
- 0x29c1c6,
- 0x29f886,
- 0x29cec6,
- 0x2bab47,
- 0x300305,
- 0x250ec7,
- 0x212a85,
- 0x2af404,
- 0x2a7006,
- 0x27f707,
- 0x2b0ecd,
- 0x26d7c7,
- 0x26bbc8,
- 0x275cc9,
- 0x275486,
- 0x2a0545,
- 0x210184,
- 0x233a06,
- 0x334b86,
- 0x24b6c6,
- 0x297088,
- 0x211883,
- 0x203b43,
- 0x323585,
- 0x3112c6,
- 0x2ac945,
- 0x23fe08,
- 0x29854a,
- 0x2f5cc4,
- 0x212b48,
- 0x292108,
- 0x2039c7,
- 0x2ecf89,
- 0x2b5ac8,
- 0x27b187,
- 0x264fc6,
- 0x205bca,
- 0x233a88,
- 0x2c5ec9,
- 0x2974c8,
- 0x21adc9,
- 0x2e7387,
- 0x2d9005,
- 0x226986,
- 0x2bec08,
- 0x24ccc8,
- 0x30bec8,
- 0x22e408,
- 0x204905,
- 0x200884,
- 0x2df288,
- 0x20bdc4,
- 0x3339c4,
- 0x267105,
- 0x28d947,
- 0x2035c9,
- 0x334847,
- 0x231985,
- 0x273686,
- 0x346d46,
- 0x213bc4,
- 0x2a1986,
- 0x2addc4,
- 0x283f06,
- 0x3b0586,
- 0x2150c6,
- 0x205285,
- 0x23fcc7,
- 0x200a83,
- 0x3334c9,
- 0x32b688,
- 0x2129c4,
- 0x27b00d,
- 0x292f88,
- 0x2f0848,
- 0x2c5e46,
- 0x368289,
- 0x3acb49,
- 0x2615c5,
- 0x29864a,
- 0x2863ca,
- 0x28b24c,
- 0x28b3c6,
- 0x274446,
- 0x2bd646,
- 0x269509,
- 0x29e2c6,
- 0x250f06,
- 0x310106,
- 0x259348,
- 0x217d86,
- 0x2c344b,
- 0x28dac5,
- 0x23fec5,
- 0x2746c5,
- 0x202606,
- 0x205b83,
- 0x23e746,
- 0x26d747,
- 0x2b8745,
- 0x379c85,
- 0x3a62c5,
- 0x2eb2c6,
- 0x261684,
- 0x311e06,
- 0x28f789,
- 0x20248c,
- 0x2af148,
- 0x28f8c4,
- 0x2ed746,
- 0x298b46,
- 0x2572c8,
- 0x2160c8,
- 0x202389,
- 0x204887,
- 0x238509,
- 0x24c346,
- 0x22f904,
- 0x20edc4,
- 0x27a944,
- 0x27ab48,
- 0x20340a,
- 0x34ff86,
- 0x353d47,
- 0x2c7687,
- 0x228885,
- 0x2a9f84,
- 0x289586,
- 0x300346,
- 0x235bc3,
- 0x32b4c7,
- 0x273fc8,
- 0x26170a,
- 0x30fa88,
- 0x29ddc8,
- 0x358045,
- 0x279405,
- 0x2631c5,
- 0x228c46,
- 0x229d06,
- 0x3aff05,
- 0x308389,
- 0x2a9d8c,
- 0x263287,
- 0x2943c8,
- 0x258945,
- 0x683c04,
- 0x2e3d84,
- 0x2d17c4,
- 0x214b06,
- 0x29b10e,
- 0x2078c7,
- 0x2bad45,
- 0x25750c,
- 0x2c0847,
- 0x27f687,
- 0x2806c9,
- 0x218189,
- 0x283985,
- 0x32b688,
- 0x2f1fc9,
- 0x2f3d05,
- 0x2b8688,
- 0x2c2c06,
- 0x360746,
- 0x2f6284,
- 0x33c1c8,
- 0x248283,
- 0x3630c4,
- 0x2b0d05,
- 0x305547,
- 0x201ec5,
- 0x27bd89,
- 0x38040d,
- 0x2a1f86,
- 0x2e9644,
- 0x2650c8,
- 0x2738ca,
- 0x21fe87,
- 0x23a245,
- 0x203c43,
- 0x29a74e,
- 0x25770c,
- 0x2f99c7,
- 0x29b2c7,
- 0x204643,
- 0x29e305,
- 0x2d17c5,
- 0x294d88,
- 0x291f49,
- 0x36e986,
- 0x257344,
- 0x22e186,
- 0x32ffcb,
- 0x3a694c,
- 0x35dc47,
- 0x2c90c5,
- 0x39e948,
- 0x2cfe05,
- 0x368787,
- 0x33b7c7,
- 0x248285,
- 0x205b83,
- 0x371284,
- 0x2041c5,
- 0x383505,
- 0x383506,
- 0x28e848,
- 0x27f707,
- 0x3820c6,
- 0x200a06,
- 0x333d86,
- 0x265689,
- 0x331647,
- 0x378186,
- 0x3a6ac6,
- 0x248346,
- 0x2a8405,
- 0x399a86,
- 0x398f45,
- 0x22b548,
- 0x29154b,
- 0x289386,
- 0x2c76c4,
- 0x2eca89,
- 0x259184,
- 0x2c2b88,
- 0x2aab47,
- 0x27dd04,
- 0x2b4e88,
- 0x2b9904,
- 0x2a8444,
- 0x3a26c5,
- 0x2d96c6,
- 0x348e07,
- 0x23fd43,
- 0x299945,
- 0x316144,
- 0x3846c6,
- 0x261648,
- 0x323ac5,
- 0x28d3c9,
- 0x20e5c5,
- 0x2d6288,
- 0x34a5c7,
- 0x388948,
- 0x2b4387,
- 0x2f0489,
- 0x362546,
- 0x336186,
- 0x310104,
- 0x264f05,
- 0x2f490c,
- 0x2746c7,
- 0x274cc7,
- 0x2c7548,
- 0x2a1f86,
- 0x26d684,
- 0x31b184,
- 0x27acc9,
- 0x2bd746,
- 0x219747,
- 0x349b84,
- 0x31b746,
- 0x27f285,
- 0x2a3087,
- 0x2c33c6,
- 0x33be89,
- 0x28b087,
- 0x264607,
- 0x2a14c6,
- 0x23f785,
- 0x278e48,
- 0x218948,
- 0x23acc6,
- 0x323b05,
- 0x251a46,
- 0x206583,
- 0x294c09,
- 0x299a0e,
- 0x2b3188,
- 0x2d3bc8,
- 0x23aacb,
- 0x28d606,
- 0x209c84,
- 0x27c344,
- 0x299b0a,
- 0x21a207,
- 0x378245,
- 0x213a89,
- 0x2b7785,
- 0x333a07,
- 0x2ff984,
- 0x324c07,
- 0x2d6a88,
- 0x2ce546,
- 0x34a889,
- 0x2b5bca,
- 0x21a186,
- 0x292ac6,
- 0x2ab545,
- 0x37e405,
- 0x3261c7,
- 0x244208,
- 0x27f1c8,
- 0x23b286,
- 0x228385,
- 0x29d80e,
- 0x328cc4,
- 0x23ac45,
- 0x273009,
- 0x28ac88,
- 0x287886,
- 0x296d0c,
- 0x298150,
- 0x29ad4f,
- 0x29c5c8,
- 0x30bc07,
- 0x205285,
- 0x27d645,
- 0x348c89,
- 0x28f149,
- 0x30a4c6,
- 0x2f9707,
- 0x393cc5,
- 0x320d49,
- 0x32d106,
- 0x29e10d,
- 0x27a809,
- 0x2039c4,
- 0x2b2f08,
- 0x2df349,
- 0x350146,
- 0x273785,
- 0x336186,
- 0x30b1c9,
- 0x38e148,
- 0x210785,
- 0x27bfc4,
- 0x296ecb,
- 0x350005,
- 0x226786,
- 0x27ca86,
- 0x25f1c6,
- 0x38c5cb,
- 0x28d4c9,
- 0x3b0245,
- 0x388707,
- 0x2cf786,
- 0x231346,
- 0x27bc48,
- 0x2d97c9,
- 0x26b98c,
- 0x2e6c08,
- 0x350246,
- 0x345d03,
- 0x334606,
- 0x27d305,
- 0x278008,
- 0x227d86,
- 0x2a32c8,
- 0x245885,
- 0x294505,
- 0x2a1d48,
- 0x301687,
- 0x381d07,
- 0x27f8c7,
- 0x2a03c8,
- 0x30bd48,
- 0x262286,
- 0x309087,
- 0x24af47,
- 0x27d1ca,
- 0x24c243,
- 0x202606,
- 0x203545,
- 0x231504,
- 0x275cc9,
- 0x2f0404,
- 0x21e084,
- 0x2989c4,
- 0x29b2cb,
- 0x2df4c7,
- 0x29da45,
- 0x2913c8,
- 0x273686,
- 0x273688,
- 0x277486,
- 0x287d45,
- 0x288685,
- 0x28a0c6,
- 0x28b548,
- 0x28b808,
- 0x275e86,
- 0x29120f,
- 0x2946d0,
- 0x358a45,
- 0x200a83,
- 0x24a985,
- 0x2fd0c8,
- 0x28f049,
- 0x3ae808,
- 0x34a708,
- 0x330608,
- 0x2df587,
- 0x273349,
- 0x2a34c8,
- 0x2785c4,
- 0x298848,
- 0x254509,
- 0x30aac7,
- 0x296144,
- 0x334908,
- 0x23fa8a,
- 0x2c2446,
- 0x29c1c6,
- 0x21b4c9,
- 0x298387,
- 0x2c2f88,
- 0x332348,
- 0x349a08,
- 0x353885,
- 0x37f385,
- 0x23fec5,
- 0x2d1785,
- 0x371dc7,
- 0x205b85,
- 0x2b8745,
- 0x36fd86,
- 0x3ae747,
- 0x37fd07,
- 0x23fd86,
- 0x2ca285,
- 0x226786,
- 0x25a685,
- 0x2c06c8,
- 0x31b5c4,
- 0x3ac8c6,
- 0x358844,
- 0x301948,
- 0x22534a,
- 0x27670c,
- 0x3658c5,
- 0x2bac06,
- 0x26bb46,
- 0x323946,
- 0x2fd2c4,
- 0x27f545,
- 0x2772c7,
- 0x298409,
- 0x2a4547,
- 0x683c04,
- 0x683c04,
- 0x30af45,
- 0x20f5c4,
- 0x2966ca,
- 0x273506,
- 0x2e7044,
- 0x3a3745,
- 0x2eee85,
- 0x300244,
- 0x27c6c7,
- 0x20e547,
- 0x2c25c8,
- 0x319188,
- 0x210789,
- 0x2994c8,
- 0x29688b,
- 0x2128c4,
- 0x35d745,
- 0x279045,
- 0x27f849,
- 0x2d97c9,
- 0x2ec988,
- 0x327ac8,
- 0x203b84,
- 0x298b85,
- 0x203443,
- 0x212885,
- 0x2d3dc6,
- 0x291d8c,
- 0x2189c6,
- 0x25a6c6,
- 0x287b05,
- 0x2eb348,
- 0x3a6bc6,
- 0x2eea46,
- 0x29c1c6,
- 0x21f40c,
- 0x24b884,
- 0x333eca,
- 0x287a48,
- 0x291bc7,
- 0x316046,
- 0x36ea47,
- 0x2e12c5,
- 0x306e46,
- 0x352386,
- 0x381bc7,
- 0x21e0c4,
- 0x202d85,
- 0x273004,
- 0x2af487,
- 0x273248,
- 0x2742ca,
- 0x27a087,
- 0x23ae47,
- 0x30bb87,
- 0x2cff49,
- 0x291d8a,
- 0x229043,
- 0x21dfc5,
- 0x215103,
- 0x39dfc9,
- 0x24b308,
- 0x2d1bc7,
- 0x3ae909,
- 0x218a46,
- 0x2c6b08,
- 0x39a745,
- 0x282c8a,
- 0x216249,
- 0x26b649,
- 0x37af07,
- 0x239849,
- 0x214fc8,
- 0x2edb06,
- 0x2badc8,
- 0x2119c7,
- 0x229187,
- 0x37b2c7,
- 0x2d1a48,
- 0x2ed5c6,
- 0x23f845,
- 0x2772c7,
- 0x2925c8,
- 0x3587c4,
- 0x2a58c4,
- 0x28c587,
- 0x2acd07,
- 0x2f1e4a,
- 0x2eda86,
- 0x2f984a,
- 0x2b7a47,
- 0x328a87,
- 0x23b384,
- 0x32d484,
- 0x2272c6,
- 0x30ed84,
- 0x30ed8c,
- 0x3a2005,
- 0x215f09,
- 0x2d6404,
- 0x300305,
- 0x273848,
- 0x28b8c5,
- 0x305546,
- 0x207c84,
- 0x29044a,
- 0x2b14c6,
- 0x29228a,
- 0x20ab87,
- 0x265b45,
- 0x21eec5,
- 0x2288ca,
- 0x2a1a85,
- 0x29c0c6,
- 0x20bdc4,
- 0x2b0146,
- 0x326285,
- 0x227e46,
- 0x3a4acc,
- 0x2cba4a,
- 0x264fc4,
- 0x2293c6,
- 0x298387,
- 0x2c8744,
- 0x259348,
- 0x38d3c6,
- 0x29d689,
- 0x2c4b89,
- 0x312b09,
- 0x376286,
- 0x211ac6,
- 0x2baf07,
- 0x3082c8,
- 0x2118c9,
- 0x2df4c7,
- 0x2b3ac6,
- 0x2adb07,
- 0x29cd85,
- 0x328cc4,
- 0x2baac7,
- 0x24b105,
- 0x2846c5,
- 0x2fe0c7,
- 0x248148,
- 0x39e8c6,
- 0x29344d,
- 0x294f8f,
- 0x29a58d,
- 0x21b3c4,
- 0x2357c6,
- 0x2cbe08,
- 0x3100c5,
- 0x27d388,
- 0x207d8a,
- 0x2039c4,
- 0x330206,
- 0x27e487,
- 0x33fe07,
- 0x298d89,
- 0x2bad85,
- 0x300244,
- 0x32888a,
- 0x2b5689,
- 0x239947,
- 0x268206,
- 0x350146,
- 0x298ac6,
- 0x35ec46,
- 0x2cb70f,
- 0x2cbcc9,
- 0x217d86,
- 0x239646,
- 0x29ed49,
- 0x309187,
- 0x2101c3,
- 0x21f586,
- 0x2042c3,
- 0x2e3848,
- 0x2ad947,
- 0x29c7c9,
- 0x2a2a88,
- 0x381e48,
- 0x216e86,
- 0x331209,
- 0x33b905,
- 0x2a33c4,
- 0x2d90c7,
- 0x269585,
- 0x21b3c4,
- 0x29db08,
- 0x21a4c4,
- 0x302b87,
- 0x31c3c6,
- 0x2ad005,
- 0x2974c8,
- 0x35000b,
- 0x32bb87,
- 0x228b46,
- 0x2bd544,
- 0x209c06,
- 0x267105,
- 0x24b105,
- 0x278bc9,
- 0x27c2c9,
- 0x2291c4,
- 0x229205,
- 0x229405,
- 0x282b06,
- 0x32b788,
- 0x2b7186,
- 0x273e0b,
- 0x2ffa0a,
- 0x2fad05,
- 0x288706,
- 0x2f59c5,
- 0x3b2585,
- 0x297b47,
- 0x204308,
- 0x238504,
- 0x2614c6,
- 0x28b886,
- 0x215187,
- 0x2fee44,
- 0x277e86,
- 0x239d85,
- 0x239d89,
- 0x211cc4,
- 0x2aa109,
- 0x275e86,
- 0x2b9408,
- 0x229405,
- 0x2c7785,
- 0x227e46,
- 0x26b889,
- 0x218189,
- 0x25a746,
- 0x28ad88,
- 0x257608,
- 0x2f5984,
- 0x32e244,
- 0x32e248,
- 0x317a08,
- 0x238609,
- 0x2d3d46,
- 0x29c1c6,
- 0x3151cd,
- 0x2c7f86,
- 0x2d8949,
- 0x254785,
- 0x30e446,
- 0x251008,
- 0x311d45,
- 0x24af84,
- 0x267105,
- 0x27b948,
- 0x296489,
- 0x2730c4,
- 0x306286,
- 0x2e74ca,
- 0x2c54c8,
- 0x2f1fc9,
- 0x2d114a,
- 0x3ae886,
- 0x295148,
- 0x368545,
- 0x30f908,
- 0x2b4485,
- 0x218909,
- 0x36c449,
- 0x228e82,
- 0x29a005,
- 0x26c7c6,
- 0x275dc7,
- 0x3aacc5,
- 0x2f8a86,
- 0x2f7e08,
- 0x2a1f86,
- 0x2c3bc9,
- 0x274dc6,
- 0x27bac8,
- 0x2a90c5,
- 0x244046,
- 0x367808,
- 0x27ab48,
- 0x3b0608,
- 0x2fc788,
- 0x399a84,
- 0x22d8c3,
- 0x2c3e04,
- 0x22e106,
- 0x29cdc4,
- 0x2d3b07,
- 0x2ee949,
- 0x2bcd45,
- 0x332346,
- 0x21f586,
- 0x28e68b,
- 0x2fac46,
- 0x318546,
- 0x3ac9c8,
- 0x379bc6,
- 0x265943,
- 0x396f83,
- 0x328cc4,
- 0x231845,
- 0x243147,
- 0x273248,
- 0x27324f,
- 0x2771cb,
- 0x32b588,
- 0x306306,
- 0x32b88e,
- 0x227e43,
- 0x2430c4,
- 0x2fabc5,
- 0x33db46,
- 0x28968b,
- 0x28da06,
- 0x213f09,
- 0x2ad005,
- 0x389d88,
- 0x206408,
- 0x21804c,
- 0x29b306,
- 0x2128c6,
- 0x2d7985,
- 0x285188,
- 0x276705,
- 0x33c7c8,
- 0x29a9ca,
- 0x226809,
- 0x683c04,
- 0x31216582,
- 0x880c8,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x323ac3,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x201604,
- 0x238483,
- 0x2264c3,
- 0x224103,
- 0x224104,
- 0x22d183,
- 0x2374c4,
- 0x2343c3,
- 0x22d684,
- 0x21eb03,
- 0x3aaf87,
- 0x211003,
- 0x2025c3,
- 0x32d208,
- 0x2264c3,
- 0x2aeecb,
- 0x2e1a03,
- 0x241f86,
- 0x203e42,
- 0x38660b,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x2264c3,
- 0x280ec3,
- 0x200cc3,
- 0x200882,
- 0x880c8,
- 0x281045,
- 0x2db108,
- 0x2e7e08,
- 0x216582,
- 0x2a0f05,
- 0x340ec7,
- 0x200202,
- 0x2417c7,
- 0x201f82,
- 0x23a887,
- 0x36b2c9,
- 0x318908,
- 0x349889,
- 0x32ed82,
- 0x266707,
- 0x25a4c4,
- 0x340f87,
- 0x2ff907,
- 0x233e42,
- 0x211003,
- 0x20e842,
- 0x205902,
- 0x201502,
- 0x206d42,
- 0x208782,
- 0x217642,
- 0x2a8c45,
- 0x2e3cc5,
- 0x16582,
- 0x343c3,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x12003,
- 0x481,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x201604,
- 0x202243,
- 0x238483,
- 0x2264c3,
- 0x21ca03,
- 0x340f2d86,
- 0x107003,
- 0x79ac5,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x216582,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x9502,
- 0x880c8,
- 0x441c4,
- 0xd0205,
- 0x200882,
- 0x2ba384,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x35bb03,
- 0x2a9c05,
- 0x202243,
- 0x332683,
- 0x238483,
- 0x201f43,
- 0x2264c3,
- 0x217643,
- 0x224183,
- 0x223ec3,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x216582,
- 0x2264c3,
- 0x880c8,
- 0x21eb03,
- 0x880c8,
- 0x316403,
- 0x22d183,
- 0x232144,
- 0x2343c3,
- 0x21eb03,
- 0x2082c2,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x2082c2,
- 0x2348c3,
- 0x238483,
- 0x2264c3,
- 0x2db083,
- 0x217643,
- 0x200882,
- 0x216582,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x241f85,
- 0x1835c6,
- 0x224104,
- 0x203e42,
- 0x880c8,
- 0x200882,
- 0x20448,
- 0x216582,
- 0xee46,
- 0x167404,
- 0x10f2cb,
- 0x173606,
- 0x131ac7,
- 0x2343c3,
- 0x21eb03,
- 0x157f45,
- 0x155dc4,
- 0x202c43,
- 0x4c207,
- 0xcd884,
- 0x238483,
- 0x133184,
- 0x2264c3,
- 0x2e26c4,
- 0x149708,
- 0x155646,
- 0x216582,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x211003,
- 0x2025c3,
- 0x2264c3,
- 0x2e1a03,
- 0x203e42,
- 0x880c8,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x201603,
- 0x212444,
- 0x238483,
- 0x2264c3,
- 0x22d183,
- 0x2343c3,
- 0x22d684,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x241f86,
- 0x2343c3,
- 0x21eb03,
- 0x179ac3,
- 0x2264c3,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x131ac7,
- 0x880c8,
- 0x21eb03,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x3aa2d183,
- 0x2343c3,
- 0x238483,
- 0x2264c3,
- 0x880c8,
- 0x200882,
- 0x216582,
- 0x22d183,
- 0x21eb03,
- 0x238483,
- 0x201502,
- 0x2264c3,
- 0x309dc7,
- 0x20b28b,
- 0x200b03,
- 0x2a06c8,
- 0x308047,
- 0x2017c6,
- 0x2bba05,
- 0x2f7989,
- 0x20bc48,
- 0x20bc49,
- 0x20bc50,
- 0x359fcb,
- 0x2ea589,
- 0x20c783,
- 0x221749,
- 0x232c46,
- 0x232c4c,
- 0x20be48,
- 0x3ac688,
- 0x26e089,
- 0x29bace,
- 0x37cc4b,
- 0x38db4c,
- 0x204803,
- 0x2582cc,
- 0x207209,
- 0x2de107,
- 0x23430c,
- 0x39b60a,
- 0x245dc4,
- 0x3b08cd,
- 0x258188,
- 0x2ded8d,
- 0x266b86,
- 0x28a70b,
- 0x209dc9,
- 0x318407,
- 0x31d846,
- 0x320f49,
- 0x332a4a,
- 0x302708,
- 0x2e1604,
- 0x272187,
- 0x226a87,
- 0x349d84,
- 0x20f244,
- 0x27e989,
- 0x326ec9,
- 0x20a588,
- 0x2114c5,
- 0x392785,
- 0x20d3c6,
- 0x3b0789,
- 0x20800d,
- 0x38d5c8,
- 0x20d2c7,
- 0x2bba88,
- 0x22eec6,
- 0x3a1504,
- 0x37f645,
- 0x2055c6,
- 0x206104,
- 0x207107,
- 0x20914a,
- 0x2139c4,
- 0x21a0c6,
- 0x21aa49,
- 0x21aa4f,
- 0x21b00d,
- 0x21b786,
- 0x220050,
- 0x220446,
- 0x220b87,
- 0x221087,
- 0x22108f,
- 0x222309,
- 0x227746,
- 0x229747,
- 0x229748,
- 0x229b09,
- 0x28d708,
- 0x2d7d07,
- 0x20cd03,
- 0x3852c6,
- 0x204008,
- 0x29bd8a,
- 0x215749,
- 0x20bd83,
- 0x340dc6,
- 0x26130a,
- 0x2ef8c7,
- 0x2ddf4a,
- 0x377e0e,
- 0x222446,
- 0x29a207,
- 0x214d86,
- 0x2072c6,
- 0x37f18b,
- 0x21d18a,
- 0x21768d,
- 0x211b87,
- 0x310288,
- 0x310289,
- 0x31028f,
- 0x3b218c,
- 0x278289,
- 0x33948e,
- 0x3ab08a,
- 0x368dc6,
- 0x37bf86,
- 0x30420c,
- 0x31370c,
- 0x327688,
- 0x33f8c7,
- 0x2131c5,
- 0x29e584,
- 0x24fb0e,
- 0x332cc4,
- 0x238a87,
- 0x26274a,
- 0x382554,
- 0x3839cf,
- 0x221248,
- 0x385188,
- 0x370e8d,
- 0x370e8e,
- 0x38fec9,
- 0x22fe88,
- 0x22fe8f,
- 0x23400c,
- 0x23400f,
- 0x235507,
- 0x237bca,
- 0x21f18b,
- 0x23a0c8,
- 0x23bb47,
- 0x25b08d,
- 0x252506,
- 0x3b0a86,
- 0x23e5c9,
- 0x215d48,
- 0x242188,
- 0x24218e,
+ 0x2b1506,
+ 0x2aaccc,
+ 0x2f55c8,
+ 0x2d0d88,
+ 0x2ba286,
+ 0x20de87,
+ 0x242f84,
+ 0x25b448,
+ 0x28f50c,
+ 0x353d0c,
+ 0x233cc5,
+ 0x2d2887,
+ 0x31d086,
+ 0x20de06,
+ 0x349ac8,
+ 0x2027c4,
+ 0x22d04b,
+ 0x27e8cb,
+ 0x249d06,
+ 0x2cf5c7,
+ 0x31a2c5,
+ 0x276545,
+ 0x22d186,
+ 0x25eb85,
+ 0x3512c5,
+ 0x2cd5c7,
+ 0x27d1c9,
+ 0x351904,
+ 0x34ee05,
+ 0x2e6fc5,
+ 0x2dea88,
+ 0x2287c5,
+ 0x2bca49,
+ 0x37aac7,
+ 0x37aacb,
+ 0x244806,
+ 0x2d4409,
+ 0x349208,
+ 0x27c385,
+ 0x238388,
+ 0x232ec8,
+ 0x23a6c7,
+ 0x2e2f87,
+ 0x2869c9,
+ 0x235c87,
+ 0x289149,
+ 0x2acf8c,
+ 0x2b0588,
+ 0x2b6189,
+ 0x321f87,
+ 0x286389,
+ 0x35bf07,
+ 0x3299c8,
+ 0x3a8285,
+ 0x22cac6,
+ 0x2c4a48,
+ 0x2f0fc8,
+ 0x285549,
+ 0x351307,
+ 0x276605,
+ 0x36b6c9,
+ 0x2b9ec6,
+ 0x2323c4,
+ 0x2323c6,
+ 0x24e8c8,
+ 0x252847,
+ 0x2d6208,
+ 0x2d1f89,
+ 0x3a1e07,
+ 0x2a29c6,
+ 0x202cc4,
+ 0x203f49,
+ 0x20f5c8,
+ 0x2ba147,
+ 0x343e06,
+ 0x20e1c6,
+ 0x3a8484,
+ 0x247f86,
+ 0x201b83,
+ 0x296789,
+ 0x202346,
+ 0x2d2205,
+ 0x2a36c6,
+ 0x24f305,
+ 0x285008,
+ 0x247187,
+ 0x244b46,
+ 0x39c6c6,
+ 0x309148,
+ 0x2a5447,
+ 0x29f9c5,
+ 0x2a09c8,
+ 0x3ada88,
+ 0x334148,
+ 0x2d4845,
+ 0x22cb46,
+ 0x24d609,
+ 0x2ac044,
+ 0x24f18b,
+ 0x21f40b,
+ 0x2463c9,
+ 0x20ad83,
+ 0x25bf05,
+ 0x213a86,
+ 0x313788,
+ 0x249844,
+ 0x351c06,
+ 0x2d6749,
+ 0x2bc545,
+ 0x2cd506,
+ 0x363206,
+ 0x2163c4,
+ 0x2aec0a,
+ 0x2d2148,
+ 0x2f0fc6,
+ 0x2c2585,
+ 0x3b1987,
+ 0x231147,
+ 0x304284,
+ 0x21f647,
+ 0x2165c4,
+ 0x2165c6,
+ 0x203c83,
+ 0x270f45,
+ 0x350e85,
+ 0x205788,
+ 0x254ac5,
+ 0x27f789,
+ 0x25b287,
+ 0x25b28b,
+ 0x2a758c,
+ 0x2a810a,
+ 0x3363c7,
+ 0x204083,
+ 0x212188,
+ 0x2d4a05,
+ 0x29d585,
+ 0x20ae44,
+ 0x3298c6,
+ 0x227b86,
+ 0x247fc7,
+ 0x2349cb,
+ 0x22d9c4,
+ 0x2e8f04,
+ 0x219e04,
+ 0x2cd786,
+ 0x222704,
+ 0x22c948,
+ 0x33c5c5,
+ 0x244d85,
+ 0x354d07,
+ 0x202d09,
+ 0x347845,
+ 0x37584a,
+ 0x277789,
+ 0x29810a,
+ 0x3a1249,
+ 0x335fc4,
+ 0x2c9605,
+ 0x2b9b48,
+ 0x2d18cb,
+ 0x278285,
+ 0x2f0086,
+ 0x2200c4,
+ 0x27fcc6,
+ 0x3a1c89,
+ 0x364b07,
+ 0x317988,
+ 0x387e46,
+ 0x387247,
+ 0x285b88,
+ 0x380946,
+ 0x37f0c4,
+ 0x363f87,
+ 0x366085,
+ 0x377547,
+ 0x25b4c4,
+ 0x2008c6,
+ 0x2f1e08,
+ 0x29cc88,
+ 0x2e88c7,
+ 0x27d548,
+ 0x29ae05,
+ 0x20abc4,
+ 0x361c88,
+ 0x27d644,
+ 0x2186c5,
+ 0x2fac44,
+ 0x3675c7,
+ 0x28d207,
+ 0x2864c8,
+ 0x2cbfc6,
+ 0x254a45,
+ 0x27f588,
+ 0x2e15c8,
+ 0x2a4c09,
+ 0x21f706,
+ 0x22e708,
+ 0x39bd0a,
+ 0x34f148,
+ 0x2e8605,
+ 0x2e2206,
+ 0x277648,
+ 0x2e2b4a,
0x20b387,
- 0x25f8c5,
- 0x243a85,
- 0x202084,
- 0x201a86,
- 0x20a488,
- 0x24f103,
- 0x3b154e,
+ 0x28a645,
+ 0x298888,
+ 0x2b3c44,
+ 0x272206,
+ 0x2c5888,
+ 0x20ac46,
+ 0x239a88,
+ 0x29bfc7,
+ 0x209806,
+ 0x2ba844,
+ 0x28ba07,
+ 0x2b6804,
+ 0x3a1c47,
+ 0x23bf0d,
+ 0x21b585,
+ 0x2d144b,
+ 0x2a1d06,
+ 0x255788,
+ 0x24b344,
+ 0x27bc86,
+ 0x2817c6,
+ 0x304047,
+ 0x29c30d,
+ 0x226dc7,
+ 0x2b6d48,
+ 0x271a05,
+ 0x27f048,
+ 0x2c7ec6,
+ 0x29ae88,
+ 0x223a06,
+ 0x26a9c7,
+ 0x336689,
+ 0x33d2c7,
+ 0x28c3c8,
+ 0x279685,
+ 0x21c848,
+ 0x20dd45,
+ 0x396005,
+ 0x3a14c5,
+ 0x221443,
+ 0x235984,
+ 0x26fd05,
+ 0x2346c9,
+ 0x285f86,
+ 0x2eab08,
+ 0x2e2d45,
+ 0x2b8847,
+ 0x2aee8a,
+ 0x2cd449,
+ 0x2c98ca,
+ 0x2d6ec8,
+ 0x2272cc,
+ 0x28724d,
+ 0x2ff683,
+ 0x239988,
+ 0x207a85,
+ 0x224cc6,
+ 0x319346,
+ 0x2e7f05,
+ 0x3b3a09,
+ 0x358f45,
+ 0x27f588,
+ 0x2841c6,
+ 0x348806,
+ 0x2a63c9,
+ 0x38f247,
+ 0x294146,
+ 0x2aee08,
+ 0x216548,
+ 0x2e0dc7,
+ 0x235ece,
+ 0x2c8105,
+ 0x358545,
+ 0x20ab48,
+ 0x27f3c7,
+ 0x20e202,
+ 0x2c3584,
+ 0x203bca,
+ 0x2ba208,
+ 0x367b46,
+ 0x29e608,
+ 0x278686,
+ 0x31a7c8,
+ 0x2b29c8,
+ 0x395fc4,
+ 0x2b8d85,
+ 0x68a8c4,
+ 0x68a8c4,
+ 0x68a8c4,
+ 0x202403,
+ 0x20e046,
+ 0x27fa46,
+ 0x2a220c,
+ 0x209843,
+ 0x285686,
+ 0x215344,
+ 0x264b08,
+ 0x2d6585,
+ 0x203cc6,
+ 0x2bedc8,
+ 0x2d8206,
+ 0x244ac6,
+ 0x381148,
+ 0x2a7907,
+ 0x235a49,
+ 0x2d4bca,
+ 0x208a84,
+ 0x216605,
+ 0x2a70c5,
+ 0x264886,
+ 0x208d46,
+ 0x2a2dc6,
+ 0x2f9ec6,
+ 0x235b84,
+ 0x235b8b,
+ 0x231144,
+ 0x2a23c5,
+ 0x2b19c5,
+ 0x203086,
+ 0x3b5548,
+ 0x287107,
+ 0x317744,
+ 0x2453c3,
+ 0x2b3745,
+ 0x30a847,
+ 0x28700b,
+ 0x205687,
+ 0x2becc8,
+ 0x2e8b47,
+ 0x231646,
+ 0x24d1c8,
+ 0x2e318b,
+ 0x2067c6,
+ 0x213bc9,
+ 0x2e3305,
+ 0x30d803,
+ 0x2cd506,
+ 0x29bec8,
+ 0x214cc3,
+ 0x200a03,
+ 0x285b86,
+ 0x278686,
+ 0x375dca,
+ 0x280e85,
+ 0x28160b,
+ 0x2a360b,
+ 0x245103,
+ 0x202043,
+ 0x2b4f84,
+ 0x278447,
+ 0x247444,
+ 0x202ec4,
+ 0x2e8c84,
+ 0x34f448,
+ 0x2c24c8,
+ 0x3b2049,
+ 0x38e748,
+ 0x200c07,
+ 0x235ec6,
+ 0x2ea74f,
+ 0x2c8246,
+ 0x2d6504,
+ 0x2c230a,
+ 0x30a747,
+ 0x208386,
+ 0x292e89,
+ 0x3b1fc5,
+ 0x2058c5,
+ 0x3b2106,
+ 0x21c983,
+ 0x2b3c89,
+ 0x219c86,
+ 0x212009,
+ 0x38b106,
+ 0x270f45,
+ 0x2340c5,
+ 0x205543,
+ 0x278588,
+ 0x211607,
+ 0x3028c4,
+ 0x264988,
+ 0x2313c4,
+ 0x338d86,
+ 0x29f386,
+ 0x2419c6,
+ 0x2cb849,
+ 0x29d505,
+ 0x38ec86,
+ 0x2a2fc9,
+ 0x2c7606,
+ 0x2ea846,
+ 0x386e86,
+ 0x200b45,
+ 0x2fac46,
+ 0x26a9c4,
+ 0x3a8285,
+ 0x2c4a44,
+ 0x2b7846,
+ 0x35aec4,
+ 0x20f843,
+ 0x28a145,
+ 0x232bc8,
+ 0x2e9687,
+ 0x2bd949,
+ 0x28a548,
+ 0x29dc51,
+ 0x36328a,
+ 0x249c47,
+ 0x2ea1c6,
+ 0x215344,
+ 0x2c4b48,
+ 0x282f48,
+ 0x29de0a,
+ 0x2bc80d,
+ 0x2a4dc6,
+ 0x381246,
+ 0x28bac6,
+ 0x2c3fc7,
+ 0x2b6e05,
+ 0x262c07,
+ 0x264a45,
+ 0x37ac04,
+ 0x2ad586,
+ 0x216287,
+ 0x2b398d,
+ 0x277587,
+ 0x21a0c8,
+ 0x27f889,
+ 0x2e2106,
+ 0x344085,
+ 0x226704,
+ 0x24e9c6,
+ 0x304186,
+ 0x2ba386,
+ 0x29ee88,
+ 0x2179c3,
+ 0x203043,
+ 0x3598c5,
+ 0x2300c6,
+ 0x2b2985,
+ 0x388048,
+ 0x2a180a,
+ 0x2cee04,
+ 0x264b08,
+ 0x29bd48,
+ 0x202ec7,
+ 0x2e2e09,
+ 0x2be9c8,
+ 0x28b387,
+ 0x2936c6,
+ 0x20ac4a,
+ 0x24ea48,
+ 0x396449,
+ 0x299188,
+ 0x21cec9,
+ 0x2ea087,
+ 0x2effc5,
+ 0x3ac4c6,
+ 0x2b1388,
+ 0x285d08,
+ 0x2a1048,
+ 0x249e08,
+ 0x2a23c5,
+ 0x20f444,
+ 0x211308,
+ 0x208484,
+ 0x3a1044,
+ 0x270f45,
+ 0x297a87,
+ 0x202ac9,
+ 0x303e47,
+ 0x215f45,
+ 0x27cdc6,
+ 0x34ebc6,
+ 0x203d44,
+ 0x2a6706,
+ 0x254884,
+ 0x27ef46,
+ 0x202886,
+ 0x214b06,
+ 0x200045,
+ 0x387f07,
+ 0x204083,
+ 0x206b49,
+ 0x308f48,
+ 0x264984,
+ 0x28b20d,
+ 0x29cd88,
+ 0x3053c8,
+ 0x3963c6,
+ 0x336789,
+ 0x2cd449,
+ 0x3a1985,
+ 0x2a190a,
+ 0x2adb4a,
+ 0x2af7cc,
+ 0x2af946,
+ 0x27d9c6,
+ 0x2c83c6,
+ 0x273209,
+ 0x224f06,
+ 0x262c46,
+ 0x359006,
0x25b448,
- 0x29ff0b,
- 0x366947,
- 0x3a31c5,
- 0x239506,
- 0x2aa947,
- 0x39a248,
- 0x27efc9,
- 0x28f685,
- 0x283688,
- 0x213446,
- 0x38b30a,
- 0x24fa09,
- 0x2343c9,
- 0x2343cb,
- 0x364b88,
- 0x349c49,
- 0x211586,
- 0x2b074a,
- 0x35904a,
- 0x237dcc,
- 0x367287,
- 0x2a998a,
- 0x27258b,
- 0x272599,
- 0x2da488,
- 0x242005,
- 0x25b246,
- 0x2ed389,
- 0x318e06,
- 0x21250a,
- 0x2f31c6,
- 0x212104,
- 0x2bf38d,
- 0x3412c7,
- 0x212109,
- 0x244d45,
- 0x244e88,
- 0x245389,
- 0x2455c4,
- 0x245cc7,
- 0x245cc8,
- 0x246347,
- 0x263e88,
- 0x24c807,
- 0x36f505,
- 0x2567cc,
- 0x256e89,
- 0x2d9a8a,
- 0x38ec09,
- 0x221849,
- 0x26b00c,
- 0x259b8b,
- 0x259e48,
- 0x25bac8,
- 0x25ee84,
- 0x27d9c8,
- 0x282309,
- 0x39b6c7,
- 0x21ac86,
- 0x399907,
- 0x325e89,
- 0x366ecb,
- 0x324907,
- 0x3714c7,
- 0x20acc7,
- 0x2ded04,
- 0x2ded05,
- 0x2a81c5,
- 0x337ecb,
- 0x3981c4,
- 0x319fc8,
- 0x25f4ca,
- 0x213507,
- 0x346547,
- 0x288f12,
- 0x283e06,
- 0x231ac6,
- 0x322fce,
- 0x361506,
- 0x28edc8,
- 0x28ff4f,
- 0x2df148,
- 0x284c08,
- 0x35f54a,
- 0x35f551,
- 0x2a274e,
- 0x23be4a,
- 0x23be4c,
- 0x230087,
- 0x230090,
- 0x204ac8,
- 0x2a2945,
- 0x2aad0a,
- 0x20614c,
- 0x2b3e0d,
- 0x2ac3c6,
- 0x2ac3c7,
- 0x2ac3cc,
- 0x2efc8c,
- 0x2da98c,
- 0x28c98b,
- 0x283044,
- 0x21b644,
- 0x3741c9,
- 0x2d72c7,
- 0x2e94c9,
- 0x358e89,
- 0x36bb47,
- 0x39b486,
- 0x39b489,
- 0x3a4a43,
- 0x2a208a,
- 0x29e7c7,
- 0x30b6cb,
- 0x21750a,
- 0x23a9c4,
- 0x353e86,
- 0x27a309,
- 0x30ec04,
- 0x3a20ca,
- 0x228e45,
- 0x2b6485,
- 0x2b648d,
- 0x2b67ce,
- 0x39f105,
- 0x3167c6,
- 0x241b87,
- 0x26748a,
- 0x39a446,
- 0x35a2c4,
- 0x35e2c7,
- 0x210ecb,
- 0x22ef87,
- 0x202104,
- 0x265d46,
- 0x265d4d,
- 0x325b4c,
- 0x32fd86,
- 0x38d7ca,
- 0x225806,
- 0x210288,
- 0x263507,
- 0x23660a,
- 0x23c3c6,
- 0x211a83,
- 0x251186,
- 0x203e88,
- 0x296a8a,
- 0x24aa47,
- 0x24aa48,
- 0x267b84,
- 0x27b2c7,
- 0x2c4108,
- 0x2a3648,
- 0x286808,
- 0x27fa0a,
- 0x2cf145,
- 0x2cf3c7,
- 0x23bc93,
- 0x22d206,
- 0x2b1648,
- 0x224709,
- 0x241688,
- 0x216f0b,
- 0x2b7848,
- 0x211004,
- 0x2a1e46,
- 0x3b3106,
- 0x2d9509,
- 0x385c07,
- 0x2568c8,
- 0x287bc6,
- 0x3a17c4,
- 0x2c2e45,
- 0x2bdc88,
- 0x2be28a,
- 0x2bf008,
- 0x2c3906,
- 0x29718a,
- 0x233588,
- 0x2c8548,
- 0x2c9908,
- 0x2c9f46,
- 0x2cc006,
- 0x31098c,
- 0x2cc5d0,
- 0x286fc5,
- 0x2def48,
- 0x2f8310,
- 0x2def50,
- 0x20bace,
- 0x31060e,
- 0x310614,
- 0x31d9cf,
- 0x31dd86,
- 0x342211,
- 0x349e53,
- 0x34a2c8,
- 0x27fd45,
- 0x358288,
- 0x20f985,
- 0x22b24c,
- 0x24bf89,
- 0x2388c9,
- 0x399687,
- 0x240589,
- 0x215a47,
- 0x2b9d86,
- 0x37f447,
- 0x20c185,
- 0x212043,
- 0x24f2c9,
- 0x217a49,
- 0x379ac3,
- 0x3aabc4,
- 0x34ae4d,
- 0x3558cf,
- 0x2fe005,
- 0x31aa06,
- 0x20cfc7,
- 0x21d5c7,
- 0x285d86,
- 0x285d8b,
- 0x2a3bc5,
- 0x258ac6,
- 0x208487,
- 0x26d109,
- 0x2de6c6,
- 0x364505,
- 0x21c08b,
- 0x22e946,
- 0x246045,
- 0x27e148,
- 0x2d8748,
- 0x2ca44c,
- 0x2ca450,
- 0x2ce7c9,
- 0x2d5587,
- 0x2f6c4b,
- 0x2d5d46,
- 0x2d7bca,
- 0x2d928b,
- 0x2d9d0a,
- 0x2d9f86,
- 0x2daf45,
- 0x307f46,
- 0x274f88,
- 0x39974a,
- 0x370b1c,
- 0x2e1acc,
- 0x2e1dc8,
- 0x241f85,
- 0x2e42c7,
- 0x29b706,
- 0x273c45,
- 0x21dd86,
- 0x285f48,
- 0x2b5907,
- 0x29b9c8,
- 0x29a30a,
- 0x3212cc,
- 0x321549,
- 0x224a87,
- 0x282844,
- 0x244386,
- 0x28478a,
- 0x358f85,
- 0x3637cc,
- 0x364f08,
- 0x360d08,
- 0x3b188c,
- 0x20c8cc,
- 0x20da49,
- 0x20dc87,
- 0x22d34c,
- 0x29d284,
- 0x2e83ca,
- 0x2ad2cc,
- 0x26eb4b,
- 0x39070b,
- 0x3a5946,
- 0x23c107,
- 0x2302c7,
- 0x2302cf,
- 0x2f0c11,
- 0x3b3a12,
- 0x23c90d,
- 0x23c90e,
- 0x23cc4e,
- 0x31db88,
- 0x31db92,
- 0x23ea88,
- 0x201407,
- 0x248bca,
- 0x20d888,
- 0x3614c5,
- 0x371c0a,
- 0x220987,
- 0x2da0c4,
- 0x202b43,
- 0x311185,
- 0x35f7c7,
- 0x39fe87,
- 0x2b400e,
- 0x3366cd,
- 0x338149,
- 0x20dfc5,
- 0x35d103,
- 0x24ea46,
- 0x36fb85,
- 0x271a48,
- 0x2b2449,
- 0x25b285,
- 0x25b28f,
- 0x2dad87,
- 0x2f78c5,
- 0x306b0a,
- 0x27fc06,
- 0x23dd09,
- 0x2ea18c,
- 0x2ebe09,
- 0x378a86,
- 0x25f2cc,
- 0x2ec206,
- 0x2ef3c8,
- 0x2ef5c6,
- 0x2da606,
- 0x280604,
- 0x25a1c3,
- 0x35760a,
- 0x369111,
- 0x38c04a,
- 0x3627c5,
- 0x2a64c7,
- 0x253647,
- 0x2c4204,
- 0x2c420b,
- 0x318788,
- 0x2b3006,
- 0x2c75c5,
- 0x38b604,
- 0x262b49,
- 0x29f2c4,
- 0x21da87,
- 0x322045,
- 0x322047,
- 0x323205,
- 0x2a8d03,
- 0x2012c8,
- 0x27f30a,
- 0x23fd43,
- 0x28108a,
- 0x26db46,
- 0x25b00f,
- 0x356849,
- 0x3b14d0,
- 0x2e22c8,
- 0x2c45c9,
- 0x293287,
- 0x265ccf,
- 0x3aecc4,
- 0x22d704,
- 0x219f46,
- 0x222b86,
- 0x3a5dca,
- 0x3903c6,
- 0x33eb87,
- 0x2f6fc8,
- 0x2f71c7,
- 0x2f7bc7,
- 0x34b94a,
- 0x2fa14b,
- 0x38e7c5,
- 0x3b3648,
- 0x238b83,
- 0x261d0c,
- 0x212f4f,
- 0x2594cd,
- 0x2bb187,
- 0x338289,
- 0x22f4c7,
- 0x25a288,
- 0x38274c,
- 0x2a6c48,
- 0x252cc8,
- 0x30c28e,
- 0x31f814,
- 0x31fd24,
- 0x33f28a,
- 0x35a54b,
- 0x215b04,
- 0x215b09,
- 0x330288,
- 0x244545,
- 0x24ec0a,
- 0x36b187,
- 0x307e44,
- 0x323ac3,
- 0x22d183,
- 0x2374c4,
- 0x2343c3,
- 0x21eb03,
- 0x201604,
- 0x202243,
- 0x211003,
- 0x2cc5c6,
- 0x212444,
- 0x238483,
- 0x2264c3,
- 0x21bd03,
- 0x200882,
- 0x323ac3,
- 0x216582,
- 0x22d183,
- 0x2374c4,
- 0x2343c3,
- 0x21eb03,
- 0x202243,
- 0x2cc5c6,
- 0x238483,
- 0x2264c3,
- 0x880c8,
- 0x22d183,
- 0x2343c3,
- 0x211cc3,
- 0x238483,
- 0x2264c3,
- 0x880c8,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x211003,
- 0x212444,
- 0x238483,
- 0x2264c3,
- 0x200882,
- 0x2f5003,
- 0x216582,
- 0x2343c3,
- 0x21eb03,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x202ec2,
- 0x200482,
- 0x216582,
- 0x22d183,
- 0x22b782,
- 0x200a82,
- 0x201604,
- 0x307b04,
- 0x219382,
- 0x212444,
- 0x201502,
- 0x2264c3,
+ 0x27d546,
+ 0x2d36cb,
+ 0x297c05,
+ 0x244d85,
+ 0x27dc45,
+ 0x366f46,
+ 0x20ac03,
+ 0x241946,
+ 0x277507,
+ 0x2c4a05,
+ 0x24c705,
+ 0x3645c5,
+ 0x327346,
+ 0x31da84,
+ 0x31da86,
+ 0x3add49,
+ 0x366dcc,
+ 0x37a948,
+ 0x33f004,
+ 0x2fa886,
+ 0x2a1e06,
+ 0x29bec8,
+ 0x218808,
+ 0x366cc9,
+ 0x3b1987,
+ 0x245989,
+ 0x254106,
+ 0x22c2c4,
+ 0x20bf04,
+ 0x286cc4,
+ 0x285b88,
+ 0x20290a,
+ 0x3477c6,
+ 0x352107,
+ 0x36f007,
+ 0x2d4505,
+ 0x2a7084,
+ 0x2913c6,
+ 0x2b6e46,
+ 0x202803,
+ 0x308d87,
+ 0x368b48,
+ 0x3a1aca,
+ 0x2ce348,
+ 0x2cec88,
+ 0x35af05,
+ 0x253245,
+ 0x26df85,
+ 0x2d48c6,
+ 0x33d4c6,
+ 0x35bd05,
+ 0x2969c9,
+ 0x2a6e8c,
+ 0x26e047,
+ 0x29de88,
+ 0x381a45,
+ 0x68a8c4,
+ 0x24df84,
+ 0x25d784,
+ 0x214486,
+ 0x2a450e,
+ 0x205947,
+ 0x2c41c5,
+ 0x2abfcc,
+ 0x231287,
+ 0x216207,
+ 0x218089,
+ 0x218f89,
+ 0x28a645,
+ 0x308f48,
+ 0x24d609,
+ 0x334005,
+ 0x2c4948,
+ 0x322906,
+ 0x361f06,
+ 0x2e4444,
+ 0x2ae848,
+ 0x251f43,
+ 0x303084,
+ 0x2b37c5,
+ 0x3ac0c7,
+ 0x210445,
+ 0x39bbc9,
+ 0x28aa8d,
+ 0x299886,
+ 0x245404,
+ 0x2937c8,
+ 0x27d00a,
+ 0x224107,
+ 0x23be45,
+ 0x203143,
+ 0x2a37ce,
+ 0x27868c,
+ 0x2faa87,
+ 0x2a46c7,
+ 0x203c03,
+ 0x224f45,
+ 0x25d785,
+ 0x29e9c8,
+ 0x29bb89,
+ 0x33ef06,
+ 0x247444,
+ 0x249b86,
+ 0x21e3cb,
+ 0x2cd1cc,
+ 0x221507,
+ 0x2d5c45,
+ 0x3ad988,
+ 0x2e0b85,
+ 0x2c2307,
+ 0x3630c7,
+ 0x251f45,
+ 0x20ac03,
+ 0x39a644,
+ 0x212905,
+ 0x351805,
+ 0x351806,
+ 0x34fd08,
+ 0x216287,
+ 0x319646,
+ 0x35c106,
+ 0x3a1406,
+ 0x2d5e89,
+ 0x20f847,
+ 0x26a5c6,
+ 0x2cd346,
+ 0x252006,
+ 0x2aeb45,
+ 0x219646,
+ 0x3768c5,
+ 0x228848,
+ 0x2973cb,
+ 0x291086,
+ 0x36f044,
+ 0x2e2909,
+ 0x25b284,
+ 0x322888,
+ 0x2324c7,
+ 0x2885c4,
+ 0x2be288,
+ 0x2c5304,
+ 0x2aeb84,
+ 0x28b145,
+ 0x35e286,
+ 0x34f387,
+ 0x239b43,
+ 0x2a2a85,
+ 0x322e84,
+ 0x358586,
+ 0x3a1a08,
+ 0x368885,
+ 0x297089,
+ 0x3363c5,
+ 0x2e1e88,
+ 0x215207,
+ 0x388dc8,
+ 0x2bd787,
+ 0x362709,
+ 0x255a86,
+ 0x32b3c6,
+ 0x359004,
+ 0x293605,
+ 0x30150c,
+ 0x27dc47,
+ 0x27e207,
+ 0x36eec8,
+ 0x299886,
+ 0x277444,
+ 0x32e344,
+ 0x286849,
+ 0x2c84c6,
+ 0x240987,
+ 0x3a8bc4,
+ 0x286086,
+ 0x343905,
+ 0x2cbb07,
+ 0x2d3646,
+ 0x252d49,
+ 0x2aab07,
+ 0x26f8c7,
+ 0x2a6246,
+ 0x3879c5,
+ 0x283988,
+ 0x219b08,
+ 0x2646c6,
+ 0x3688c5,
+ 0x261b06,
+ 0x209983,
+ 0x29e849,
+ 0x2a2b4e,
+ 0x2bd488,
+ 0x2314c8,
+ 0x2644cb,
+ 0x2972c6,
+ 0x2089c4,
+ 0x244ac4,
+ 0x2a2c4a,
+ 0x216907,
+ 0x26a685,
+ 0x213bc9,
+ 0x2c3285,
+ 0x3a1087,
+ 0x2b4c04,
+ 0x284487,
+ 0x2e65c8,
+ 0x2cb206,
+ 0x21e789,
+ 0x2beaca,
+ 0x216886,
+ 0x29c8c6,
+ 0x2b1945,
+ 0x37ccc5,
+ 0x31a107,
+ 0x24dd08,
+ 0x343848,
+ 0x395fc6,
+ 0x234145,
+ 0x208ace,
+ 0x2b8bc4,
+ 0x264645,
+ 0x27c749,
+ 0x30dfc8,
+ 0x28f0c6,
+ 0x2a04cc,
+ 0x2a1410,
+ 0x2a414f,
+ 0x2a51c8,
+ 0x3363c7,
+ 0x200045,
+ 0x26fd05,
+ 0x34f209,
+ 0x298a89,
+ 0x23cbc6,
+ 0x278307,
+ 0x2d2805,
+ 0x21b509,
+ 0x340146,
+ 0x224d4d,
+ 0x286b89,
+ 0x202ec4,
+ 0x2bd208,
+ 0x2113c9,
+ 0x347986,
+ 0x27cec5,
+ 0x32b3c6,
+ 0x317849,
+ 0x26ba08,
+ 0x212485,
+ 0x2ae844,
+ 0x2a068b,
+ 0x347845,
+ 0x2a07c6,
+ 0x287586,
+ 0x26ed86,
+ 0x287fcb,
+ 0x297189,
+ 0x35c045,
+ 0x388b87,
+ 0x363206,
+ 0x220f06,
+ 0x25d508,
+ 0x35e389,
+ 0x219e8c,
+ 0x30a648,
+ 0x360406,
+ 0x340bc3,
+ 0x303c06,
+ 0x287e05,
+ 0x281948,
+ 0x233b46,
+ 0x2cbd48,
+ 0x275845,
+ 0x29dfc5,
+ 0x215348,
+ 0x31a947,
+ 0x319287,
+ 0x247fc7,
+ 0x220d88,
+ 0x336508,
+ 0x31e4c6,
+ 0x2b7687,
+ 0x247987,
+ 0x287cca,
+ 0x254003,
+ 0x366f46,
+ 0x202a45,
+ 0x203bc4,
+ 0x27f889,
+ 0x362684,
+ 0x2a7e44,
+ 0x2a1c84,
+ 0x2a46cb,
+ 0x211547,
+ 0x208d05,
+ 0x29ab08,
+ 0x27cdc6,
+ 0x27cdc8,
+ 0x280dc6,
+ 0x2900c5,
+ 0x290385,
+ 0x291f46,
+ 0x292b08,
+ 0x292dc8,
+ 0x27fa46,
+ 0x29a94f,
+ 0x29e310,
+ 0x3b1785,
+ 0x204083,
+ 0x22c385,
+ 0x30b188,
+ 0x298989,
+ 0x334148,
+ 0x2d5d08,
+ 0x224788,
+ 0x211607,
+ 0x27ca89,
+ 0x2cbf48,
+ 0x25bd44,
+ 0x2a1b08,
+ 0x2deb49,
+ 0x2b81c7,
+ 0x29f904,
+ 0x303f08,
+ 0x387cca,
+ 0x2ebe06,
+ 0x2a4dc6,
+ 0x21f5c9,
+ 0x2a1647,
+ 0x2ce1c8,
+ 0x30cc88,
+ 0x3a8a48,
+ 0x356245,
+ 0x37dc45,
+ 0x244d85,
+ 0x25d745,
+ 0x37e287,
+ 0x20ac05,
+ 0x2c4a05,
+ 0x2b5546,
+ 0x334087,
+ 0x2d1807,
+ 0x387fc6,
+ 0x2d7405,
+ 0x2a07c6,
+ 0x212245,
+ 0x2b84c8,
+ 0x2f1d84,
+ 0x2c7686,
+ 0x343744,
+ 0x2b69c8,
+ 0x2c778a,
+ 0x28004c,
+ 0x234bc5,
+ 0x2c4086,
+ 0x21a046,
+ 0x368706,
+ 0x30b384,
+ 0x343bc5,
+ 0x280c07,
+ 0x2a16c9,
+ 0x2cdc87,
+ 0x68a8c4,
+ 0x68a8c4,
+ 0x3175c5,
+ 0x32dd04,
+ 0x29fe8a,
+ 0x27cc46,
+ 0x24d404,
+ 0x208305,
+ 0x37a545,
+ 0x2b6d44,
+ 0x2871c7,
+ 0x36b847,
+ 0x2cd788,
+ 0x368ec8,
+ 0x212489,
+ 0x340248,
+ 0x2a004b,
+ 0x250b44,
+ 0x221005,
+ 0x2840c5,
+ 0x247f49,
+ 0x35e389,
+ 0x2e2808,
+ 0x232248,
+ 0x203084,
+ 0x2a1e45,
+ 0x202943,
+ 0x264845,
+ 0x38ed06,
+ 0x29b9cc,
+ 0x20f4c6,
+ 0x247246,
+ 0x28f345,
+ 0x3273c8,
+ 0x2bd606,
+ 0x2ea346,
+ 0x2a4dc6,
+ 0x2297cc,
+ 0x2ba544,
+ 0x3a154a,
+ 0x28f288,
+ 0x29b807,
+ 0x322d86,
+ 0x33efc7,
+ 0x2f2185,
+ 0x343e06,
+ 0x34af86,
+ 0x356707,
+ 0x2be7c4,
+ 0x3676c5,
+ 0x27c744,
+ 0x37ac87,
+ 0x27c988,
+ 0x27d84a,
+ 0x284a07,
+ 0x2d22c7,
+ 0x336347,
+ 0x2e0cc9,
+ 0x29b9ca,
+ 0x219e43,
+ 0x2e9645,
+ 0x200c83,
+ 0x2e8cc9,
+ 0x26ac48,
+ 0x38eb47,
+ 0x334249,
+ 0x219c06,
+ 0x2d4108,
+ 0x337f85,
+ 0x2e16ca,
+ 0x2d8c49,
+ 0x2abc49,
+ 0x3aea07,
+ 0x283049,
+ 0x214a08,
+ 0x3568c6,
+ 0x2c4248,
+ 0x217b07,
+ 0x235c87,
+ 0x277787,
+ 0x2d2688,
+ 0x2fa706,
+ 0x387a85,
+ 0x280c07,
+ 0x29c3c8,
+ 0x3436c4,
+ 0x30e3c4,
+ 0x294047,
+ 0x2b2d47,
+ 0x24d48a,
+ 0x356846,
+ 0x330f0a,
+ 0x2c34c7,
+ 0x2b8987,
+ 0x257e44,
+ 0x289204,
+ 0x2d3546,
+ 0x3b3d44,
+ 0x3b3d4c,
+ 0x203505,
+ 0x218649,
+ 0x2dfc44,
+ 0x2b6e05,
+ 0x27cf88,
+ 0x292e85,
+ 0x375846,
+ 0x217f84,
+ 0x3ae3ca,
+ 0x32b7c6,
+ 0x2a68ca,
+ 0x237f07,
+ 0x2d3385,
+ 0x21c985,
+ 0x2d454a,
+ 0x2a6805,
+ 0x2a4cc6,
+ 0x208484,
+ 0x2b5106,
+ 0x31a1c5,
+ 0x233c06,
+ 0x2e88cc,
+ 0x2cd90a,
+ 0x2936c4,
+ 0x235ec6,
+ 0x2a1647,
+ 0x2d5204,
+ 0x25b448,
+ 0x38e5c6,
+ 0x208949,
+ 0x2bb109,
+ 0x2b0689,
+ 0x24f346,
+ 0x217c06,
+ 0x2c4387,
+ 0x296908,
+ 0x217a09,
+ 0x211547,
+ 0x29ac86,
+ 0x3872c7,
+ 0x28b985,
+ 0x2b8bc4,
+ 0x2c3f47,
+ 0x247b45,
+ 0x28b085,
+ 0x235247,
+ 0x251e08,
+ 0x3ad906,
+ 0x29d24d,
+ 0x29ebcf,
+ 0x2a360d,
+ 0x215f84,
+ 0x232cc6,
+ 0x2d91c8,
+ 0x358fc5,
+ 0x287e88,
+ 0x23a58a,
+ 0x202ec4,
+ 0x21e946,
+ 0x239607,
+ 0x22d9c7,
+ 0x2a79c9,
+ 0x2c4205,
+ 0x2b6d44,
+ 0x2b8cca,
+ 0x2be589,
+ 0x283147,
+ 0x272086,
+ 0x347986,
+ 0x2a1d86,
+ 0x364046,
+ 0x2d890f,
+ 0x2d9089,
+ 0x27d546,
+ 0x282e46,
+ 0x32fd89,
+ 0x2b7787,
+ 0x226743,
+ 0x229946,
+ 0x218303,
+ 0x2e7dc8,
+ 0x387107,
+ 0x2a53c9,
+ 0x29f208,
+ 0x3193c8,
+ 0x351446,
+ 0x20f409,
+ 0x23c1c5,
+ 0x2b7844,
+ 0x2a73c7,
+ 0x273285,
+ 0x215f84,
+ 0x208dc8,
+ 0x216bc4,
+ 0x2b74c7,
+ 0x34bc06,
+ 0x2b3045,
+ 0x299188,
+ 0x34784b,
+ 0x319c07,
+ 0x2d47c6,
+ 0x2c82c4,
+ 0x32d146,
+ 0x270f45,
+ 0x247b45,
+ 0x283709,
+ 0x286dc9,
+ 0x235cc4,
+ 0x235d05,
+ 0x235f05,
+ 0x2e1546,
+ 0x309048,
+ 0x2c2c46,
+ 0x36898b,
+ 0x2b4c8a,
+ 0x2b6905,
+ 0x290406,
+ 0x3025c5,
+ 0x2e0a45,
+ 0x2ab6c7,
+ 0x3ac808,
+ 0x245984,
+ 0x26c586,
+ 0x292e46,
+ 0x214bc7,
+ 0x30d7c4,
+ 0x2817c6,
+ 0x2b9f85,
+ 0x2b9f89,
+ 0x2135c4,
+ 0x2a7209,
+ 0x27fa46,
+ 0x2c5108,
+ 0x235f05,
+ 0x36f105,
+ 0x233c06,
+ 0x219d89,
+ 0x218f89,
+ 0x2472c6,
+ 0x30e0c8,
+ 0x28abc8,
+ 0x302584,
+ 0x2b9004,
+ 0x2b9008,
+ 0x3269c8,
+ 0x245a89,
+ 0x38ec86,
+ 0x2a4dc6,
+ 0x320c0d,
+ 0x351c06,
+ 0x34c209,
+ 0x23d1c5,
+ 0x3b2106,
+ 0x262d48,
+ 0x31d9c5,
+ 0x2479c4,
+ 0x270f45,
+ 0x2866c8,
+ 0x29fc49,
+ 0x27c804,
+ 0x2008c6,
+ 0x39660a,
+ 0x2fa988,
+ 0x24d609,
+ 0x244c4a,
+ 0x3341c6,
+ 0x29ed88,
+ 0x2c20c5,
+ 0x2c0e48,
+ 0x2bd885,
+ 0x219ac9,
+ 0x36bd09,
+ 0x203602,
+ 0x2e3305,
+ 0x276286,
+ 0x27f987,
+ 0x295705,
+ 0x2f0ec6,
+ 0x306288,
+ 0x299886,
+ 0x2b9a09,
+ 0x27e306,
+ 0x25d388,
+ 0x2afb85,
+ 0x25c586,
+ 0x26aac8,
+ 0x285b88,
+ 0x2e9f88,
+ 0x347b08,
+ 0x219644,
+ 0x209fc3,
+ 0x2b9c44,
+ 0x249b06,
+ 0x28b9c4,
+ 0x231407,
+ 0x2ea249,
+ 0x2c7a05,
+ 0x30cc86,
+ 0x229946,
+ 0x34fb4b,
+ 0x2b6846,
+ 0x20edc6,
+ 0x2cb6c8,
+ 0x24c646,
+ 0x2bcb03,
+ 0x2080c3,
+ 0x2b8bc4,
+ 0x22e605,
+ 0x2b4447,
+ 0x27c988,
+ 0x27c98f,
+ 0x280b0b,
+ 0x308e48,
+ 0x200946,
+ 0x30914e,
+ 0x233c03,
+ 0x2b43c4,
+ 0x2b67c5,
+ 0x2b6bc6,
+ 0x2914cb,
+ 0x297b46,
+ 0x222709,
+ 0x2b3045,
+ 0x38a208,
+ 0x211d88,
+ 0x218e4c,
+ 0x2a4706,
+ 0x264886,
+ 0x2de405,
+ 0x28c188,
+ 0x26aac5,
+ 0x335848,
+ 0x2a084a,
+ 0x2a3a49,
+ 0x68a8c4,
+ 0x3760d1c2,
+ 0x15f048,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x368883,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x2964c4,
+ 0x204ac3,
+ 0x200383,
+ 0x210e03,
+ 0x24ae04,
+ 0x2d0783,
+ 0x23a184,
+ 0x231b83,
+ 0x2da904,
+ 0x332ec3,
+ 0x2959c7,
+ 0x20fbc3,
+ 0x20abc3,
+ 0x2842c8,
+ 0x200383,
+ 0x2b400b,
+ 0x2f2a03,
+ 0x2716c6,
+ 0x205bc2,
+ 0x26b44b,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x200383,
+ 0x200e03,
+ 0x203383,
+ 0x204cc2,
+ 0x15f048,
+ 0x325b45,
+ 0x247bc8,
+ 0x2ec408,
+ 0x20d1c2,
+ 0x329dc5,
+ 0x39c307,
+ 0x2001c2,
+ 0x24b587,
+ 0x208a42,
+ 0x246f87,
+ 0x239ec9,
+ 0x2c1c88,
+ 0x3a88c9,
+ 0x338b02,
+ 0x270647,
+ 0x2abac4,
+ 0x39c3c7,
+ 0x2b4b87,
+ 0x24ca02,
+ 0x20fbc3,
+ 0x20b602,
+ 0x202082,
+ 0x200382,
+ 0x217902,
+ 0x200e02,
+ 0x20c4c2,
+ 0x2af685,
+ 0x24dec5,
+ 0xd1c2,
+ 0x31b83,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x117c3,
+ 0x701,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x2964c4,
+ 0x204303,
+ 0x204ac3,
+ 0x200383,
0x21bd03,
- 0x3a5946,
- 0x221e42,
- 0x206202,
- 0x224dc2,
- 0x3d224643,
- 0x3d626703,
- 0x53d46,
- 0x53d46,
- 0x224104,
- 0x140a30a,
- 0x16970c,
- 0x165f0c,
- 0x798cd,
- 0xdb7c7,
- 0x1b908,
- 0x22f08,
- 0x1a7eca,
- 0x3e31f345,
- 0x11f349,
- 0x163048,
- 0x1ac10a,
- 0x16348e,
- 0x144148b,
- 0x167404,
- 0x2988,
- 0x16e847,
- 0x178587,
- 0x112089,
- 0x10ec87,
- 0x132d48,
- 0x1a2f89,
- 0x17a845,
- 0x5074e,
- 0xa910d,
- 0x131948,
- 0x3e6d7e86,
- 0x60c47,
- 0x62607,
- 0x67347,
- 0x6c4c7,
- 0xd382,
- 0x141807,
- 0x1d34c,
- 0xeaec7,
- 0x8ddc6,
- 0xa5449,
- 0xa7188,
- 0xf1c2,
- 0xa82,
- 0x13088b,
- 0x15309,
- 0x33c49,
- 0x2b848,
- 0xb09c2,
- 0x1afb89,
- 0xccf89,
- 0xcdbc8,
- 0xce147,
- 0xcf0c9,
- 0xd2905,
- 0xd2d10,
- 0x164d46,
- 0x51f05,
- 0x23b4d,
- 0x10e846,
- 0xdc047,
- 0xe26d8,
- 0x108548,
- 0x19104a,
- 0x4114d,
- 0x1402,
- 0x161186,
- 0x89948,
- 0x180248,
- 0x87f89,
- 0x45e88,
- 0x4da0e,
- 0xe8f85,
- 0x539c8,
- 0x3282,
- 0x155646,
- 0x6c2,
- 0xb81,
- 0x3eae2f44,
- 0x3ee90c43,
+ 0x3a40d686,
+ 0x5e303,
+ 0x854c5,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x8082,
+ 0x15f048,
+ 0x4dcc4,
+ 0xe0f85,
+ 0x204cc2,
+ 0x2cfa44,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x236d03,
+ 0x2b0405,
+ 0x204303,
+ 0x205d83,
+ 0x204ac3,
+ 0x2104c3,
+ 0x200383,
+ 0x213e83,
+ 0x24ae83,
+ 0x24abc3,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x20d1c2,
+ 0x200383,
+ 0x15f048,
+ 0x332ec3,
+ 0x15f048,
+ 0x26ae03,
+ 0x2d0783,
+ 0x22ef04,
+ 0x231b83,
+ 0x332ec3,
+ 0x20a3c2,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x20a3c2,
+ 0x22d603,
+ 0x204ac3,
+ 0x200383,
+ 0x2ec383,
+ 0x213e83,
+ 0x204cc2,
+ 0x20d1c2,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x2716c5,
+ 0x1540c6,
+ 0x24ae04,
+ 0x205bc2,
+ 0x15f048,
+ 0x204cc2,
+ 0x1d508,
+ 0x20d1c2,
+ 0x97606,
+ 0x1681c4,
+ 0x16e1cb,
+ 0x3dc06,
+ 0xfcc7,
+ 0x231b83,
+ 0x332ec3,
+ 0x15ae05,
+ 0x19c804,
+ 0x221543,
+ 0x53fc7,
+ 0xdc304,
+ 0x204ac3,
+ 0x94fc4,
+ 0x200383,
+ 0x2f39c4,
+ 0xfe588,
+ 0x125886,
+ 0x114f85,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x20abc3,
+ 0x200383,
+ 0x2f2a03,
+ 0x205bc2,
+ 0x15f048,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204143,
+ 0x213184,
+ 0x204ac3,
+ 0x200383,
+ 0x2d0783,
+ 0x231b83,
+ 0x2da904,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x2716c6,
+ 0x231b83,
+ 0x332ec3,
+ 0x178ac3,
+ 0x200383,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0xfcc7,
+ 0x15f048,
+ 0x332ec3,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x40ed0783,
+ 0x231b83,
+ 0x204ac3,
+ 0x200383,
+ 0x15f048,
+ 0x204cc2,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200382,
+ 0x200383,
+ 0x316e47,
+ 0x23860b,
+ 0x2396c3,
+ 0x24be08,
+ 0x296687,
+ 0x225246,
+ 0x2c6145,
+ 0x373549,
+ 0x20f948,
+ 0x260d09,
+ 0x260d10,
+ 0x35d28b,
+ 0x385989,
+ 0x209303,
+ 0x2b5649,
+ 0x230806,
+ 0x23080c,
+ 0x260f08,
+ 0x3ae848,
+ 0x35d7c9,
+ 0x2a5d0e,
+ 0x20780b,
+ 0x2eb20c,
+ 0x205283,
+ 0x26cc4c,
+ 0x205289,
+ 0x257a87,
+ 0x231acc,
+ 0x36aa8a,
+ 0x24fe44,
+ 0x393f4d,
+ 0x26cb08,
+ 0x210e0d,
+ 0x272746,
+ 0x29258b,
+ 0x31a3c9,
+ 0x23d087,
+ 0x339606,
+ 0x349d89,
+ 0x38ce8a,
+ 0x37a0c8,
+ 0x2f24c4,
+ 0x34ecc7,
+ 0x3ac5c7,
+ 0x3a8dc4,
+ 0x32d984,
+ 0x237209,
+ 0x2ceac9,
+ 0x237908,
+ 0x210b85,
+ 0x392545,
+ 0x20aa06,
+ 0x393e09,
+ 0x23a80d,
+ 0x2eac88,
+ 0x20a907,
+ 0x2c61c8,
+ 0x382986,
+ 0x37ed04,
+ 0x359b85,
+ 0x202246,
+ 0x203204,
+ 0x205187,
+ 0x206d8a,
+ 0x211cc4,
+ 0x2167c6,
+ 0x2182c9,
+ 0x2182cf,
+ 0x2197cd,
+ 0x21a486,
+ 0x21d110,
+ 0x21d506,
+ 0x21dc47,
+ 0x21ebc7,
+ 0x21ebcf,
+ 0x21f889,
+ 0x2242c6,
+ 0x226487,
+ 0x226488,
+ 0x227649,
+ 0x2b3108,
+ 0x2e7907,
+ 0x20a203,
+ 0x378c86,
+ 0x3abf08,
+ 0x2a5fca,
+ 0x21fe49,
+ 0x20fa83,
+ 0x39c206,
+ 0x26c3ca,
+ 0x2fca47,
+ 0x2578ca,
+ 0x26a24e,
+ 0x21f9c6,
+ 0x2e3507,
+ 0x227086,
+ 0x201806,
+ 0x37da4b,
+ 0x30c58a,
+ 0x317ecd,
+ 0x217cc7,
+ 0x359188,
+ 0x359189,
+ 0x35918f,
+ 0x20e28c,
+ 0x281bc9,
+ 0x2e928e,
+ 0x295aca,
+ 0x3035c6,
+ 0x2fbbc6,
+ 0x3b06cc,
+ 0x3106cc,
+ 0x311448,
+ 0x33d1c7,
+ 0x25b7c5,
+ 0x2251c4,
+ 0x2438ce,
+ 0x38d104,
+ 0x257bc7,
+ 0x26d08a,
+ 0x36e914,
+ 0x373a4f,
+ 0x21ed88,
+ 0x378b48,
+ 0x357e8d,
+ 0x357e8e,
+ 0x3823c9,
+ 0x3a5b08,
+ 0x3a5b0f,
+ 0x2317cc,
+ 0x2317cf,
+ 0x232a07,
+ 0x23acca,
+ 0x21cc4b,
+ 0x23bcc8,
+ 0x23e5c7,
+ 0x264f4d,
+ 0x3151c6,
+ 0x394106,
+ 0x2417c9,
+ 0x259888,
+ 0x24c108,
+ 0x24c10e,
+ 0x238707,
+ 0x226985,
+ 0x24da85,
+ 0x205e04,
+ 0x225506,
+ 0x237808,
+ 0x260183,
+ 0x2efb8e,
+ 0x265308,
+ 0x2f198b,
+ 0x26afc7,
+ 0x395e05,
+ 0x26cdc6,
+ 0x2b0e07,
+ 0x307048,
+ 0x319f09,
+ 0x298fc5,
+ 0x28a188,
+ 0x217306,
+ 0x3a02ca,
+ 0x2437c9,
+ 0x231b89,
+ 0x231b8b,
+ 0x201148,
+ 0x3a8c89,
+ 0x210c46,
+ 0x22c54a,
+ 0x2b7f4a,
+ 0x23aecc,
+ 0x3acb87,
+ 0x2c1a8a,
+ 0x328ecb,
+ 0x328ed9,
+ 0x30fa48,
+ 0x271745,
+ 0x265106,
+ 0x258fc9,
+ 0x261cc6,
+ 0x21324a,
+ 0x20fb46,
+ 0x201e44,
+ 0x2c9ecd,
+ 0x201e47,
+ 0x20b549,
+ 0x383305,
+ 0x24e548,
+ 0x24ee89,
+ 0x24f0c4,
+ 0x24fd47,
+ 0x24fd48,
+ 0x250287,
+ 0x26ea08,
+ 0x2545c7,
+ 0x35c2c5,
+ 0x25c70c,
+ 0x25cf49,
+ 0x2c4dca,
+ 0x38f0c9,
+ 0x2b5749,
+ 0x2739cc,
+ 0x263e0b,
+ 0x2640c8,
+ 0x265688,
+ 0x268a44,
+ 0x288288,
+ 0x289389,
+ 0x36ab47,
+ 0x218506,
+ 0x317287,
+ 0x21e1c9,
+ 0x328b0b,
+ 0x32cfc7,
+ 0x200407,
+ 0x238047,
+ 0x210d84,
+ 0x210d85,
+ 0x2ac905,
+ 0x33c00b,
+ 0x399404,
+ 0x369d08,
+ 0x26f08a,
+ 0x2173c7,
+ 0x341dc7,
+ 0x290c12,
+ 0x27ee46,
+ 0x22e886,
+ 0x35898e,
+ 0x281346,
+ 0x298708,
+ 0x29938f,
+ 0x2111c8,
+ 0x38bb08,
+ 0x3af64a,
+ 0x3af651,
+ 0x2a6b4e,
+ 0x254e4a,
+ 0x254e4c,
+ 0x2014c7,
+ 0x3a5d10,
+ 0x3b5388,
+ 0x2a6d45,
+ 0x2b114a,
+ 0x20324c,
+ 0x29afcd,
+ 0x2fce06,
+ 0x2fce07,
+ 0x2fce0c,
+ 0x305c8c,
+ 0x32814c,
+ 0x28f98b,
+ 0x289b84,
+ 0x21f744,
+ 0x374149,
+ 0x2fe3c7,
+ 0x23e389,
+ 0x2b7d89,
+ 0x35a587,
+ 0x36a906,
+ 0x36a909,
+ 0x39d403,
+ 0x2129ca,
+ 0x32f807,
+ 0x238acb,
+ 0x317d4a,
+ 0x2abb44,
+ 0x39c546,
+ 0x284c89,
+ 0x3b3bc4,
+ 0x2035ca,
+ 0x2d4ac5,
+ 0x2c0005,
+ 0x2c000d,
+ 0x2c034e,
+ 0x378205,
+ 0x323506,
+ 0x2712c7,
+ 0x38684a,
+ 0x38d406,
+ 0x35ecc4,
+ 0x2f8987,
+ 0x2da18b,
+ 0x382a47,
+ 0x282ac4,
+ 0x24f706,
+ 0x24f70d,
+ 0x21de8c,
+ 0x204986,
+ 0x2eae8a,
+ 0x235806,
+ 0x2f3248,
+ 0x28bf47,
+ 0x33f88a,
+ 0x23d986,
+ 0x217bc3,
+ 0x262ec6,
+ 0x3abd88,
+ 0x2a024a,
+ 0x2766c7,
+ 0x2766c8,
+ 0x27dd84,
+ 0x2cc0c7,
+ 0x23ccc8,
+ 0x29e008,
+ 0x288b48,
+ 0x33110a,
+ 0x2e0405,
+ 0x2e0687,
+ 0x254c93,
+ 0x2d0806,
+ 0x26f288,
+ 0x222c09,
+ 0x24b448,
+ 0x3514cb,
+ 0x2cddc8,
+ 0x273704,
+ 0x215446,
+ 0x3b4f06,
+ 0x35e0c9,
+ 0x2c72c7,
+ 0x25c808,
+ 0x29e186,
+ 0x235144,
+ 0x2ce085,
+ 0x2c8a08,
+ 0x2c900a,
+ 0x2c9b48,
+ 0x2ce746,
+ 0x29ef8a,
+ 0x351988,
+ 0x2d5008,
+ 0x2d6a88,
+ 0x2d70c6,
+ 0x2d93c6,
+ 0x20168c,
+ 0x2d99d0,
+ 0x28de45,
+ 0x210fc8,
+ 0x306790,
+ 0x210fd0,
+ 0x260b8e,
+ 0x20130e,
+ 0x201314,
+ 0x31abcf,
+ 0x31af86,
+ 0x3319d1,
+ 0x339793,
+ 0x339c08,
+ 0x3aafc5,
+ 0x35b6c8,
+ 0x385785,
+ 0x22854c,
+ 0x229489,
+ 0x282449,
+ 0x245d47,
+ 0x377009,
+ 0x243d87,
+ 0x2fadc6,
+ 0x359987,
+ 0x261245,
+ 0x211803,
+ 0x260349,
+ 0x222ec9,
+ 0x378ac3,
+ 0x39a544,
+ 0x35c40d,
+ 0x3b1b0f,
+ 0x235185,
+ 0x35b5c6,
+ 0x211b07,
+ 0x325987,
+ 0x28cd86,
+ 0x28cd8b,
+ 0x2a82c5,
+ 0x25f106,
+ 0x2fba47,
+ 0x276ec9,
+ 0x2290c6,
+ 0x22e405,
+ 0x31190b,
+ 0x23bb46,
+ 0x3724c5,
+ 0x28b548,
+ 0x321d88,
+ 0x2d75cc,
+ 0x2d75d0,
+ 0x2e0149,
+ 0x2e7107,
+ 0x30860b,
+ 0x2e6186,
+ 0x2e77ca,
+ 0x2ea4cb,
+ 0x2eb74a,
+ 0x2eb9c6,
+ 0x2ec245,
+ 0x32f546,
+ 0x27e4c8,
+ 0x245e0a,
+ 0x357b1c,
+ 0x2f2acc,
+ 0x2f2dc8,
+ 0x2716c5,
+ 0x2f4f07,
+ 0x26a106,
+ 0x27d385,
+ 0x21c2c6,
+ 0x28cf48,
+ 0x2be807,
+ 0x2a5c08,
+ 0x2e360a,
+ 0x34a10c,
+ 0x34a389,
+ 0x37ee87,
+ 0x20d244,
+ 0x24db46,
+ 0x38b68a,
+ 0x2b7e85,
+ 0x20734c,
+ 0x20b088,
+ 0x377648,
+ 0x20d98c,
+ 0x21be8c,
+ 0x2206c9,
+ 0x220907,
+ 0x342c0c,
+ 0x3aa644,
+ 0x23c54a,
+ 0x2580cc,
+ 0x278acb,
+ 0x24140b,
+ 0x241f46,
+ 0x383847,
+ 0x2ddb07,
+ 0x3a5f4f,
+ 0x2fda11,
+ 0x2ddb12,
+ 0x30d0cd,
+ 0x30d0ce,
+ 0x30d40e,
+ 0x31ad88,
+ 0x31ad92,
+ 0x252288,
+ 0x2962c7,
+ 0x25260a,
+ 0x204748,
+ 0x281305,
+ 0x37e0ca,
+ 0x21da47,
+ 0x305304,
+ 0x21b083,
+ 0x2b0fc5,
+ 0x3af8c7,
+ 0x2fea07,
+ 0x29b1ce,
+ 0x30ff4d,
+ 0x313c49,
+ 0x220c45,
+ 0x33aa03,
+ 0x25fac6,
+ 0x36ffc5,
+ 0x2f1bc8,
+ 0x30c009,
+ 0x265145,
+ 0x26514f,
+ 0x2ec087,
+ 0x373485,
+ 0x21b2ca,
+ 0x299b86,
+ 0x2f33c9,
+ 0x384d0c,
+ 0x2f99c9,
+ 0x207b06,
+ 0x26ee8c,
+ 0x340cc6,
+ 0x2fc548,
+ 0x2fc746,
+ 0x30fbc6,
+ 0x349344,
+ 0x264443,
+ 0x2b270a,
+ 0x35b211,
+ 0x281d8a,
+ 0x255d05,
+ 0x277947,
+ 0x259307,
+ 0x23cdc4,
+ 0x23cdcb,
+ 0x3a8748,
+ 0x2bd306,
+ 0x36ef45,
+ 0x3a05c4,
+ 0x291949,
+ 0x330304,
+ 0x25cd87,
+ 0x332705,
+ 0x332707,
+ 0x358bc5,
+ 0x2af743,
+ 0x296188,
+ 0x34398a,
+ 0x239b43,
+ 0x325b8a,
+ 0x3b4086,
+ 0x264ecf,
+ 0x353689,
+ 0x2efb10,
+ 0x2dee88,
+ 0x2d0e89,
+ 0x29d087,
+ 0x24f68f,
+ 0x334604,
+ 0x2da984,
+ 0x21d386,
+ 0x2b3546,
+ 0x256dca,
+ 0x383586,
+ 0x32a787,
+ 0x3055c8,
+ 0x3057c7,
+ 0x306047,
+ 0x307a4a,
+ 0x309b4b,
+ 0x3a2445,
+ 0x2dd748,
+ 0x2166c3,
+ 0x3b120c,
+ 0x37140f,
+ 0x25b5cd,
+ 0x2c4607,
+ 0x313d89,
+ 0x217687,
+ 0x23e148,
+ 0x36eb0c,
+ 0x273608,
+ 0x258908,
+ 0x3188ce,
+ 0x32bad4,
+ 0x32bfe4,
+ 0x3424ca,
+ 0x35ea8b,
+ 0x243e44,
+ 0x243e49,
+ 0x21e9c8,
+ 0x24e105,
+ 0x25fc8a,
+ 0x239d87,
+ 0x2957c4,
+ 0x368883,
+ 0x2d0783,
+ 0x23a184,
+ 0x231b83,
+ 0x332ec3,
+ 0x2964c4,
+ 0x204303,
+ 0x20fbc3,
+ 0x201686,
+ 0x213184,
+ 0x204ac3,
+ 0x200383,
+ 0x21aa03,
+ 0x204cc2,
+ 0x368883,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x23a184,
+ 0x231b83,
+ 0x332ec3,
+ 0x204303,
+ 0x201686,
+ 0x204ac3,
+ 0x200383,
+ 0x15f048,
+ 0x2d0783,
+ 0x231b83,
+ 0x2135c3,
+ 0x204ac3,
+ 0x200383,
+ 0x15f048,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x213184,
+ 0x204ac3,
+ 0x200383,
+ 0x204cc2,
+ 0x21fd43,
+ 0x20d1c2,
+ 0x231b83,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x20e542,
+ 0x20d882,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x209c02,
+ 0x201d42,
+ 0x2964c4,
+ 0x222044,
+ 0x223342,
+ 0x213184,
+ 0x200382,
+ 0x200383,
+ 0x21aa03,
+ 0x241f46,
+ 0x217082,
+ 0x2016c2,
+ 0x201a82,
+ 0x436111c3,
+ 0x43a014c3,
+ 0x59a86,
+ 0x59a86,
+ 0x24ae04,
+ 0x143768a,
+ 0x2608c,
+ 0x21ecc,
+ 0x852cd,
+ 0x2ac47,
+ 0x1a608,
+ 0x218c8,
+ 0x19834a,
+ 0x446db445,
+ 0x12b089,
+ 0x103008,
+ 0x8ed4a,
+ 0x14a60e,
+ 0x144b24b,
+ 0x1681c4,
+ 0x1672c8,
+ 0x13edc7,
+ 0x16f07,
+ 0x11dd09,
+ 0x1b3c47,
+ 0x94b88,
+ 0x61f49,
+ 0x4bfc5,
+ 0x12494e,
+ 0xafbcd,
+ 0xfb48,
+ 0x44a37046,
+ 0x45437048,
+ 0x79c88,
+ 0x117050,
+ 0x69c87,
+ 0x6cf47,
+ 0x71187,
+ 0x75f87,
+ 0xa9c2,
+ 0x62507,
+ 0x10c74c,
+ 0x3b9c7,
+ 0xa9f46,
+ 0xaa689,
+ 0xad708,
+ 0x18d82,
+ 0x1d42,
+ 0x24a0b,
+ 0x2ccc9,
+ 0x4c809,
+ 0x17de88,
+ 0xb5e02,
+ 0x104389,
+ 0xd2fca,
+ 0xdb9c9,
+ 0xdd048,
+ 0xddfc7,
+ 0xe0389,
+ 0xe4685,
+ 0xe4a90,
+ 0x1a8e86,
+ 0x63c85,
+ 0x4a84d,
+ 0x1b3806,
+ 0xee547,
+ 0xf39d8,
+ 0x96b88,
+ 0xba9ca,
+ 0x53b4d,
+ 0x1702,
+ 0x177ac6,
+ 0x91788,
+ 0x1ae208,
+ 0x15ef09,
+ 0x56608,
+ 0x5dece,
+ 0xd68d,
+ 0xf8805,
+ 0x62288,
+ 0x59688,
+ 0x6902,
+ 0x125886,
+ 0x6c82,
+ 0x3c1,
+ 0x8b4c3,
+ 0x44ef4244,
+ 0x4529a283,
0x141,
- 0x1650c6,
+ 0x15c06,
0x141,
0x1,
- 0x1650c6,
- 0x14f60c5,
- 0x245dc4,
- 0x22d183,
- 0x247344,
- 0x201604,
- 0x238483,
- 0x2245c5,
- 0x21ca03,
- 0x215cc3,
- 0x2e9cc5,
- 0x223ec3,
- 0x3fe2d183,
- 0x2343c3,
- 0x21eb03,
+ 0x15c06,
+ 0x8b4c3,
+ 0x14e4285,
+ 0x24fe44,
+ 0x2d0783,
+ 0x251304,
+ 0x2964c4,
+ 0x204ac3,
+ 0x222ac5,
+ 0x21bd03,
+ 0x2202c3,
+ 0x370145,
+ 0x24abc3,
+ 0x466d0783,
+ 0x231b83,
+ 0x332ec3,
0x200041,
- 0x211003,
- 0x307b04,
- 0x212444,
- 0x238483,
- 0x2264c3,
- 0x217643,
- 0x880c8,
- 0x200882,
- 0x323ac3,
- 0x216582,
- 0x22d183,
- 0x2343c3,
- 0x211cc3,
- 0x200a82,
- 0x201604,
- 0x202243,
- 0x211003,
- 0x238483,
- 0x2025c3,
- 0x2264c3,
- 0x223ec3,
- 0x880c8,
- 0x38bcc2,
- 0x16582,
- 0x1462d48,
- 0xf738e,
- 0x40e00142,
- 0x29e988,
- 0x227fc6,
- 0x2bb546,
- 0x227947,
- 0x41201102,
- 0x417566c8,
- 0x3af8ca,
- 0x2606c8,
- 0x201002,
- 0x29e609,
- 0x38e807,
- 0x21ac06,
- 0x201009,
- 0x254704,
- 0x2f5fc6,
- 0x2d5fc4,
- 0x273a04,
- 0x2563c9,
- 0x281786,
- 0x2e3d85,
- 0x220e45,
- 0x3a5287,
- 0x2b7cc7,
- 0x243884,
- 0x227b86,
- 0x39fac5,
- 0x202b05,
- 0x2f5905,
- 0x392547,
- 0x366785,
- 0x308bc9,
- 0x2808c5,
- 0x2d07c4,
- 0x39a387,
- 0x30584e,
- 0x30fc49,
- 0x322e89,
- 0x348986,
- 0x31e708,
- 0x2b024b,
- 0x2d210c,
- 0x25b946,
- 0x37cb07,
- 0x209805,
- 0x20f24a,
- 0x20a689,
- 0x252249,
- 0x293d86,
- 0x2ee6c5,
- 0x28b145,
- 0x361f09,
- 0x2f5a8b,
- 0x277606,
- 0x32e5c6,
- 0x20d2c4,
- 0x288bc6,
- 0x25f948,
- 0x203d06,
- 0x3a82c6,
- 0x208bc8,
- 0x2093c7,
- 0x209589,
- 0x20c445,
- 0x880c8,
- 0x378504,
- 0x229e04,
- 0x212d45,
- 0x395589,
- 0x223707,
- 0x22370b,
- 0x2255ca,
- 0x22b185,
- 0x41a0b602,
- 0x2173c7,
- 0x41e2c488,
- 0x2833c7,
- 0x281ac5,
- 0x32594a,
- 0x16582,
- 0x24b90b,
- 0x2adc4a,
- 0x2248c6,
- 0x3a31c3,
- 0x230dcd,
- 0x3320cc,
- 0x36210d,
- 0x3845c5,
- 0x237205,
- 0x24f147,
- 0x3a8e89,
- 0x3af7c6,
- 0x390245,
- 0x2ee3c8,
- 0x288ac3,
- 0x2e8108,
- 0x288ac8,
- 0x2bc507,
- 0x2e62c8,
- 0x3af3c9,
- 0x236107,
- 0x20ae07,
- 0x335048,
- 0x253384,
- 0x253387,
- 0x266a88,
- 0x205846,
- 0x3661cf,
- 0x215507,
- 0x2e3506,
- 0x25a405,
- 0x224f43,
- 0x372207,
- 0x36e143,
- 0x246506,
- 0x247f86,
- 0x249686,
- 0x28d1c5,
- 0x263e83,
- 0x3885c8,
- 0x370489,
- 0x38124b,
- 0x249808,
- 0x24c4c5,
- 0x24d4c5,
- 0x4223aa82,
- 0x37f509,
- 0x201687,
- 0x258b45,
- 0x2562c7,
- 0x257e06,
- 0x35eb05,
- 0x36f9cb,
- 0x259e44,
- 0x260285,
- 0x2603c7,
- 0x271986,
- 0x271fc5,
- 0x27dbc7,
- 0x27e647,
- 0x26db04,
- 0x2871ca,
- 0x287688,
- 0x3685c9,
- 0x3a65c5,
- 0x333386,
- 0x25fb0a,
- 0x220d46,
- 0x24bb47,
- 0x318a8d,
- 0x2273c9,
- 0x30ff45,
- 0x24ff87,
- 0x335608,
- 0x3675c8,
- 0x341b87,
- 0x34a486,
- 0x2116c7,
- 0x247883,
- 0x337ec4,
- 0x35c385,
- 0x38cac7,
- 0x391f49,
- 0x21a6c8,
- 0x22fd05,
- 0x382a04,
- 0x240e85,
- 0x2448cd,
- 0x201142,
- 0x3006c6,
- 0x3610c6,
- 0x2bde4a,
- 0x3791c6,
- 0x37fc45,
- 0x319285,
- 0x319287,
- 0x38b14c,
- 0x26fb8a,
- 0x288886,
- 0x29e445,
- 0x288a06,
+ 0x20fbc3,
+ 0x222044,
+ 0x213184,
+ 0x204ac3,
+ 0x200383,
+ 0x213e83,
+ 0x15f048,
+ 0x204cc2,
+ 0x368883,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x231b83,
+ 0x2135c3,
+ 0x201d42,
+ 0x2964c4,
+ 0x204303,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x20abc3,
+ 0x200383,
+ 0x24abc3,
+ 0x15f048,
+ 0x371182,
+ 0xd1c2,
+ 0x1491b48,
+ 0x10598e,
+ 0x47608c42,
+ 0x32f9c8,
+ 0x233d86,
+ 0x210186,
+ 0x233707,
+ 0x47a00902,
+ 0x47f53508,
+ 0x20ebca,
+ 0x269708,
+ 0x201442,
+ 0x32f649,
+ 0x3a2487,
+ 0x218486,
+ 0x295ec9,
+ 0x247ec4,
+ 0x2e4186,
+ 0x2e1bc4,
+ 0x26bdc4,
+ 0x25bf49,
+ 0x326286,
+ 0x24df85,
+ 0x291285,
+ 0x390387,
+ 0x2c3747,
+ 0x2911c4,
+ 0x233946,
+ 0x2ffb45,
+ 0x367445,
+ 0x302505,
+ 0x392307,
+ 0x26ae05,
+ 0x315e49,
+ 0x32d305,
+ 0x307184,
+ 0x38d347,
+ 0x32ecce,
+ 0x330a09,
+ 0x358849,
+ 0x3ac9c6,
+ 0x2fe248,
+ 0x2b520b,
+ 0x2e3b0c,
+ 0x2898c6,
+ 0x2076c7,
+ 0x37b305,
+ 0x32d98a,
+ 0x237a09,
+ 0x3aa989,
+ 0x257646,
+ 0x2fb805,
+ 0x2aabc5,
+ 0x348f89,
+ 0x30268b,
+ 0x280f46,
+ 0x338346,
+ 0x20a904,
+ 0x2908c6,
+ 0x226a08,
+ 0x3abc06,
+ 0x20c5c6,
+ 0x206188,
+ 0x207f47,
+ 0x208649,
+ 0x209705,
+ 0x15f048,
+ 0x216e84,
+ 0x33d5c4,
+ 0x369f05,
+ 0x204f49,
+ 0x222347,
+ 0x22234b,
+ 0x223e4a,
+ 0x228485,
+ 0x4820a002,
+ 0x238987,
+ 0x48629248,
+ 0x27be07,
+ 0x2bf945,
+ 0x3aac0a,
+ 0xd1c2,
+ 0x38740b,
+ 0x25470a,
+ 0x222dc6,
+ 0x395e03,
+ 0x29538d,
+ 0x3582cc,
+ 0x37f24d,
+ 0x381085,
+ 0x227dc5,
+ 0x2601c7,
+ 0x209c09,
+ 0x20eac6,
+ 0x383405,
+ 0x2d8008,
+ 0x2907c3,
+ 0x2ec708,
+ 0x2907c8,
+ 0x2c6c47,
+ 0x3b2448,
+ 0x39b7c9,
+ 0x2c9747,
+ 0x238187,
+ 0x302b88,
+ 0x38ca44,
+ 0x38ca47,
+ 0x272648,
+ 0x2024c6,
+ 0x206fcf,
+ 0x2118c7,
+ 0x2e7a86,
+ 0x23e2c5,
+ 0x223783,
+ 0x365a47,
+ 0x36da03,
+ 0x250446,
+ 0x251c46,
+ 0x252a06,
+ 0x296e85,
+ 0x26ea03,
+ 0x388a48,
+ 0x370c89,
+ 0x37ffcb,
+ 0x252b88,
+ 0x254285,
+ 0x256405,
+ 0x48aabc02,
+ 0x359a49,
+ 0x296547,
+ 0x25f185,
+ 0x25be47,
+ 0x25dd86,
+ 0x363f05,
+ 0x36fe0b,
+ 0x2640c4,
+ 0x2692c5,
+ 0x269407,
+ 0x27b786,
+ 0x27bbc5,
+ 0x288487,
0x288d47,
- 0x28a9c6,
- 0x28d0cc,
- 0x201149,
- 0x42765547,
- 0x290305,
- 0x290306,
- 0x2906c8,
- 0x2b1f05,
- 0x2a4805,
- 0x2a4a48,
- 0x2a4c4a,
- 0x42a6a242,
- 0x42e0ff82,
- 0x382245,
- 0x29cdc3,
- 0x37a688,
- 0x21d083,
- 0x2a4ec4,
- 0x23de4b,
- 0x272408,
- 0x2d77c8,
- 0x433255c9,
- 0x2a8949,
- 0x2a9006,
- 0x2aa5c8,
- 0x2aa7c9,
- 0x2ab386,
- 0x2ab505,
- 0x383086,
- 0x2abc09,
- 0x2802c7,
- 0x243f06,
- 0x235c47,
- 0x3af647,
- 0x33b504,
- 0x43743909,
- 0x2c2288,
- 0x3565c8,
- 0x2368c7,
- 0x2bd906,
- 0x2fe209,
- 0x331f47,
- 0x2f1b0a,
- 0x376848,
- 0x3237c7,
- 0x326086,
- 0x33aa0a,
- 0x249fc8,
- 0x28ab05,
- 0x21bf85,
- 0x2bcb87,
- 0x2d26c9,
- 0x2d6e0b,
- 0x2dd8c8,
- 0x280949,
- 0x249b07,
- 0x3ad20c,
- 0x2b1acc,
- 0x2b1dca,
- 0x2b204c,
- 0x2bb4c8,
- 0x2bb6c8,
- 0x2bb8c4,
- 0x2bbc89,
- 0x2bbec9,
- 0x2bc10a,
- 0x2bc389,
- 0x2bc6c7,
- 0x20010c,
- 0x36ef86,
- 0x26de48,
- 0x220e06,
- 0x387346,
- 0x30fe47,
- 0x341d08,
- 0x25180b,
- 0x283287,
- 0x2aeb49,
- 0x2474c9,
- 0x255f87,
- 0x2d6204,
- 0x35efc7,
- 0x29f606,
- 0x219006,
- 0x38d985,
- 0x2ccd88,
- 0x20ef04,
- 0x20ef06,
- 0x26fa4b,
- 0x2a2389,
- 0x364086,
- 0x3a8409,
- 0x3926c6,
- 0x2fec08,
- 0x214803,
- 0x2083c5,
- 0x219149,
- 0x21fe05,
- 0x3a6084,
- 0x270fc6,
- 0x3a5a85,
- 0x2e6846,
- 0x2fbc07,
- 0x367186,
- 0x2952cb,
- 0x2b0647,
- 0x2d2586,
- 0x374346,
- 0x3a5346,
- 0x243849,
- 0x26238a,
- 0x2b6045,
- 0x21f68d,
- 0x2a4d46,
- 0x391246,
- 0x2e21c6,
- 0x210205,
- 0x2d3007,
- 0x2962c7,
- 0x23b68e,
- 0x211003,
- 0x2bd8c9,
- 0x318fc9,
- 0x20f647,
- 0x276b87,
- 0x299d85,
- 0x306f45,
- 0x43a7eacf,
- 0x2c4807,
- 0x2c49c8,
- 0x2c5a44,
- 0x2c5d06,
- 0x43e43b02,
- 0x2ca1c6,
- 0x2cc5c6,
- 0x251b4e,
- 0x2e7f4a,
- 0x21cd06,
- 0x33fcca,
- 0x3b4089,
- 0x316fc5,
- 0x393b48,
- 0x3ad0c6,
- 0x34ab88,
- 0x30f788,
- 0x25ab8b,
- 0x227a45,
- 0x366808,
- 0x208d0c,
- 0x281987,
- 0x248b06,
- 0x22f108,
- 0x201948,
- 0x44208382,
- 0x362b0b,
- 0x280bc9,
- 0x363e89,
- 0x209987,
- 0x30e688,
- 0x4460c648,
- 0x3a8c0b,
- 0x22b6c9,
- 0x20870d,
- 0x217e88,
- 0x22c288,
- 0x44a02282,
- 0x31d784,
- 0x44e23b42,
- 0x2ebc06,
- 0x452016c2,
- 0x3a180a,
- 0x201fc6,
- 0x225f08,
- 0x31ea08,
- 0x2b7546,
- 0x386986,
- 0x2e6606,
- 0x2a00c5,
- 0x23b184,
- 0x456feb84,
- 0x338986,
- 0x269047,
- 0x45a2ab47,
- 0x32be0b,
- 0x305c09,
- 0x23724a,
- 0x251404,
- 0x3193c8,
- 0x243ccd,
- 0x2e07c9,
- 0x2e0a08,
- 0x2e1149,
- 0x2e26c4,
- 0x200f04,
- 0x269885,
- 0x30b48b,
- 0x272386,
- 0x3387c5,
- 0x281c49,
- 0x227c48,
- 0x29ca84,
- 0x20f3c9,
- 0x2b0585,
- 0x2b7d08,
- 0x20b4c7,
- 0x323288,
- 0x27a506,
- 0x217287,
- 0x28eb89,
- 0x21c209,
- 0x2460c5,
- 0x231445,
- 0x45e25242,
- 0x39a144,
- 0x2fd585,
- 0x2a9746,
- 0x2f89c5,
- 0x268307,
- 0x243405,
- 0x243484,
- 0x348a46,
- 0x3902c7,
- 0x243b46,
- 0x325dc5,
- 0x31d488,
- 0x2281c5,
- 0x332607,
- 0x397409,
- 0x2a24ca,
- 0x22dac7,
- 0x22dacc,
- 0x2e3d46,
- 0x226349,
- 0x2ad585,
- 0x2c6e08,
- 0x211543,
- 0x211545,
- 0x2e9405,
- 0x256cc7,
- 0x46214f02,
- 0x236e47,
- 0x2d6786,
- 0x343846,
- 0x2e8cc6,
- 0x201886,
- 0x347e88,
- 0x3583c5,
- 0x2e35c7,
- 0x2e35cd,
- 0x202b43,
- 0x3a35c5,
- 0x3068c7,
- 0x3864c8,
- 0x386085,
- 0x366c88,
- 0x22a946,
- 0x31f507,
- 0x2bcf05,
- 0x227ac6,
- 0x3711c5,
- 0x2ba40a,
- 0x2eb1c6,
- 0x236487,
- 0x2c5bc5,
- 0x35a387,
- 0x35e244,
- 0x3a6006,
- 0x2f61c5,
- 0x28158b,
- 0x29f489,
- 0x37a20a,
- 0x246148,
- 0x2ff148,
- 0x300a4c,
- 0x3047c7,
- 0x32b388,
- 0x32edc8,
- 0x336085,
- 0x2bc94a,
- 0x35d109,
- 0x46601082,
- 0x205446,
- 0x214684,
- 0x3b1249,
- 0x2220c9,
- 0x24d307,
- 0x26c307,
- 0x358d09,
- 0x210408,
- 0x21040f,
- 0x3477c6,
- 0x20a0cb,
- 0x2e9b05,
- 0x2e9b07,
- 0x2e9f49,
- 0x20f346,
- 0x20f347,
- 0x3b3d85,
- 0x232784,
- 0x2633c6,
- 0x201284,
- 0x30ac07,
- 0x345e08,
- 0x46aee5c8,
- 0x2eebc5,
- 0x2eed07,
- 0x238289,
- 0x2740c4,
- 0x3a3888,
- 0x46f20b88,
- 0x2c4204,
- 0x2330c8,
- 0x31d904,
- 0x21f989,
- 0x2230c5,
- 0x47203e42,
- 0x347805,
- 0x220c85,
- 0x29fc88,
- 0x235347,
- 0x47600cc2,
- 0x2c81c5,
- 0x246b46,
- 0x256646,
- 0x39a108,
- 0x2ec008,
- 0x2f8986,
- 0x31b086,
- 0x22a489,
- 0x343786,
- 0x37870b,
- 0x30c145,
- 0x20d7c6,
- 0x390088,
- 0x252606,
- 0x28f506,
- 0x21c64a,
- 0x2ae4ca,
- 0x24ce85,
- 0x358487,
- 0x2d8e06,
- 0x47a03dc2,
- 0x306a07,
- 0x2c7a45,
- 0x25fa84,
- 0x25fa85,
- 0x251306,
- 0x270447,
- 0x2144c5,
- 0x222184,
- 0x2712c8,
- 0x28f5c5,
- 0x2cebc7,
- 0x39c105,
- 0x216805,
- 0x247b04,
- 0x28cbc9,
- 0x39f908,
- 0x2f5ec6,
- 0x36fcc6,
- 0x2c3f06,
- 0x47ef3648,
- 0x2f3847,
- 0x2f3fcd,
- 0x2f460c,
- 0x2f4c09,
- 0x2f4e49,
- 0x48351e02,
- 0x3a4803,
- 0x24cf03,
- 0x29f6c5,
- 0x38cbca,
- 0x31af46,
- 0x2f8e05,
- 0x2fc144,
- 0x2fc14b,
- 0x30d10c,
- 0x30d94c,
- 0x30dc55,
- 0x311acd,
- 0x313a0f,
- 0x313dd2,
- 0x31424f,
- 0x314612,
- 0x314a93,
- 0x314f4d,
- 0x31550d,
- 0x31588e,
- 0x315d4e,
- 0x31658c,
- 0x31694c,
- 0x316d8b,
- 0x31710e,
- 0x31a1d2,
- 0x31ad0c,
- 0x31b8d0,
- 0x327e52,
- 0x328dcc,
- 0x32948d,
- 0x3297cc,
- 0x32d8d1,
- 0x32e74d,
- 0x336b0d,
- 0x33710a,
- 0x33738c,
- 0x337c8c,
- 0x3384cc,
- 0x338d4c,
- 0x33c9d3,
- 0x33d050,
- 0x33d450,
- 0x33dccd,
- 0x33e2cc,
- 0x33efc9,
- 0x3402cd,
- 0x340613,
- 0x342e51,
- 0x343293,
- 0x343b4f,
- 0x343f0c,
- 0x34420f,
- 0x3445cd,
- 0x344bcf,
- 0x344f90,
- 0x345a0e,
- 0x34b48e,
- 0x34bbd0,
- 0x34c7cd,
- 0x34d14e,
- 0x34d4cc,
- 0x34e493,
- 0x34fc8e,
- 0x3503d0,
- 0x3507d1,
- 0x350c0f,
- 0x350fd3,
- 0x35198d,
- 0x351ccf,
- 0x35208e,
- 0x352990,
- 0x352d89,
- 0x3539d0,
- 0x35400f,
- 0x35468f,
- 0x354a52,
- 0x355ece,
- 0x35788d,
- 0x35998d,
- 0x359ccd,
- 0x35ac4d,
- 0x35af8d,
- 0x35b2d0,
- 0x35b6cb,
- 0x35c14c,
- 0x35c4cc,
- 0x35c7cc,
- 0x35cace,
- 0x372990,
- 0x3744d2,
- 0x37494b,
- 0x3750ce,
- 0x37544e,
- 0x375cce,
- 0x37728b,
- 0x48777856,
- 0x378ecd,
- 0x379354,
- 0x37a98d,
- 0x37c655,
- 0x37d78d,
- 0x37e10f,
- 0x37e94f,
- 0x38150f,
- 0x3818ce,
- 0x382b0d,
- 0x384151,
- 0x386b0c,
- 0x386e0c,
- 0x38710b,
- 0x387a0c,
- 0x387dcf,
- 0x388192,
- 0x388b4d,
- 0x389b0c,
+ 0x2d1784,
+ 0x28e04a,
+ 0x28e508,
+ 0x2c2149,
+ 0x3648c5,
+ 0x2951c6,
+ 0x226bca,
+ 0x387646,
+ 0x26f5c7,
+ 0x2c1e0d,
+ 0x2a1f09,
+ 0x3597c5,
+ 0x339dc7,
+ 0x368388,
+ 0x26a888,
+ 0x314d07,
+ 0x20b246,
+ 0x217807,
+ 0x221143,
+ 0x33c004,
+ 0x3607c5,
+ 0x38dcc7,
+ 0x391d09,
+ 0x22a8c8,
+ 0x33fac5,
+ 0x242844,
+ 0x2f5bc5,
+ 0x38174d,
+ 0x203742,
+ 0x386ac6,
+ 0x377a06,
+ 0x2c8bca,
+ 0x37e686,
+ 0x38b5c5,
+ 0x368fc5,
+ 0x368fc7,
+ 0x3a010c,
+ 0x279b0a,
+ 0x290586,
+ 0x225085,
+ 0x290706,
+ 0x290a47,
+ 0x292846,
+ 0x296d8c,
+ 0x296009,
+ 0x48e16087,
+ 0x299745,
+ 0x299746,
+ 0x299d08,
+ 0x236785,
+ 0x2a8b45,
+ 0x2a9548,
+ 0x2a974a,
+ 0x49258142,
+ 0x4960c2c2,
+ 0x2e8f85,
+ 0x28b9c3,
+ 0x22b108,
+ 0x241d03,
+ 0x2a99c4,
+ 0x2f350b,
+ 0x34ef48,
+ 0x305148,
+ 0x49b67ec9,
+ 0x2af389,
+ 0x2afac6,
+ 0x2b0a88,
+ 0x2b0c89,
+ 0x2b1786,
+ 0x2b1905,
+ 0x372a86,
+ 0x2b1e49,
+ 0x319d87,
+ 0x25c446,
+ 0x233147,
+ 0x20e947,
+ 0x362e04,
+ 0x49f453c9,
+ 0x2cd008,
+ 0x353408,
+ 0x383d07,
+ 0x2c8686,
+ 0x235389,
+ 0x210147,
+ 0x34970a,
+ 0x330d48,
+ 0x349407,
+ 0x3b1546,
+ 0x2e834a,
+ 0x2733c8,
+ 0x30de45,
+ 0x36dac5,
+ 0x2f9807,
+ 0x371d49,
+ 0x3097cb,
+ 0x31e0c8,
+ 0x32d389,
+ 0x253487,
+ 0x2bad4c,
+ 0x2bb74c,
+ 0x2bba4a,
+ 0x2bbccc,
+ 0x2c5c08,
+ 0x2c5e08,
+ 0x2c6004,
+ 0x2c63c9,
+ 0x2c6609,
+ 0x2c684a,
+ 0x2c6ac9,
+ 0x2c6e07,
+ 0x3a448c,
+ 0x24b946,
+ 0x35d588,
+ 0x387706,
+ 0x330c06,
+ 0x3596c7,
+ 0x238ec8,
+ 0x2618cb,
+ 0x303207,
+ 0x359c49,
+ 0x251489,
+ 0x25bbc7,
+ 0x2e1e04,
+ 0x3643c7,
+ 0x2e1246,
+ 0x214046,
+ 0x2eb045,
+ 0x2c7408,
+ 0x2976c4,
+ 0x2976c6,
+ 0x2799cb,
+ 0x212cc9,
+ 0x209e06,
+ 0x20c709,
+ 0x392486,
+ 0x3aae08,
+ 0x214183,
+ 0x2fb985,
+ 0x215a09,
+ 0x224085,
+ 0x2f9644,
+ 0x27acc6,
+ 0x2ed005,
+ 0x2f7346,
+ 0x309ec7,
+ 0x328dc6,
+ 0x3a174b,
+ 0x22c447,
+ 0x234886,
+ 0x3742c6,
+ 0x390446,
+ 0x291189,
+ 0x240aca,
+ 0x2b8ec5,
+ 0x21898d,
+ 0x2a9846,
+ 0x2babc6,
+ 0x2ded86,
+ 0x2f31c5,
+ 0x2e4d87,
+ 0x29fa87,
+ 0x22bd4e,
+ 0x20fbc3,
+ 0x2c8649,
+ 0x263709,
+ 0x32dd87,
+ 0x2804c7,
+ 0x2a2ec5,
+ 0x343f05,
+ 0x4a23734f,
+ 0x2d10c7,
+ 0x2d1288,
+ 0x2d25c4,
+ 0x2d2e86,
+ 0x4a64db02,
+ 0x2d7346,
+ 0x201686,
+ 0x2638ce,
+ 0x2ec54a,
+ 0x28b6c6,
+ 0x22d88a,
+ 0x209a09,
+ 0x323d05,
+ 0x393948,
+ 0x3aef46,
+ 0x359508,
+ 0x2392c8,
+ 0x34434b,
+ 0x233805,
+ 0x26ae88,
+ 0x2062cc,
+ 0x2bf807,
+ 0x252546,
+ 0x281fc8,
+ 0x2253c8,
+ 0x4aa09282,
+ 0x25604b,
+ 0x37b489,
+ 0x2cf2c9,
+ 0x2f02c7,
+ 0x3b3648,
+ 0x4ae289c8,
+ 0x20e64b,
+ 0x37dd09,
+ 0x33f58d,
+ 0x27d648,
+ 0x290188,
+ 0x4b201882,
+ 0x3b2f44,
+ 0x4b60dc42,
+ 0x2f9486,
+ 0x4ba038c2,
+ 0x2448ca,
+ 0x210546,
+ 0x22d208,
+ 0x289e88,
+ 0x2e4086,
+ 0x2eb5c6,
+ 0x2f7106,
+ 0x2f1b45,
+ 0x23c804,
+ 0x4be1de04,
+ 0x20ae86,
+ 0x29a787,
+ 0x4c2f7d07,
+ 0x2dc60b,
+ 0x32f089,
+ 0x227e0a,
+ 0x263144,
+ 0x369108,
+ 0x25c20d,
+ 0x2f1509,
+ 0x2f1748,
+ 0x2f2009,
+ 0x2f39c4,
+ 0x20ce44,
+ 0x283cc5,
+ 0x317b0b,
+ 0x34eec6,
+ 0x33c645,
+ 0x21fb89,
+ 0x233a08,
+ 0x263844,
+ 0x32db09,
+ 0x208f45,
+ 0x2c3788,
+ 0x238847,
+ 0x358c48,
+ 0x284e86,
+ 0x22b987,
+ 0x2984c9,
+ 0x311a89,
+ 0x372545,
+ 0x295645,
+ 0x4c626a82,
+ 0x306f44,
+ 0x30ce05,
+ 0x2c1846,
+ 0x327285,
+ 0x2b4707,
+ 0x20af85,
+ 0x27b7c4,
+ 0x3aca86,
+ 0x383487,
+ 0x232106,
+ 0x21e105,
+ 0x202608,
+ 0x233f85,
+ 0x205d07,
+ 0x20bc49,
+ 0x212e0a,
+ 0x2494c7,
+ 0x2494cc,
+ 0x24df46,
+ 0x2e9ac9,
+ 0x230505,
+ 0x2366c8,
+ 0x210c03,
+ 0x210c05,
+ 0x2f7b45,
+ 0x26e707,
+ 0x4ca27202,
+ 0x227a07,
+ 0x2e5206,
+ 0x345306,
+ 0x2e62c6,
+ 0x225306,
+ 0x2091c8,
+ 0x35b805,
+ 0x2e7b47,
+ 0x2e7b4d,
+ 0x21b083,
+ 0x21f305,
+ 0x21b087,
+ 0x26b308,
+ 0x21ac45,
+ 0x2281c8,
+ 0x2ab9c6,
+ 0x32b247,
+ 0x2c7bc5,
+ 0x233886,
+ 0x2cfac5,
+ 0x22dfca,
+ 0x2efec6,
+ 0x25dbc7,
+ 0x2bc605,
+ 0x2f44c7,
+ 0x2f8904,
+ 0x2f95c6,
+ 0x3624c5,
+ 0x32608b,
+ 0x2e10c9,
+ 0x23d74a,
+ 0x3725c8,
+ 0x3007c8,
+ 0x300f0c,
+ 0x306b47,
+ 0x308c48,
+ 0x30aa88,
+ 0x30dac5,
+ 0x338b4a,
+ 0x33aa09,
+ 0x4ce00202,
+ 0x200206,
+ 0x20d684,
+ 0x2ef889,
+ 0x275d49,
+ 0x27b1c7,
+ 0x2fa547,
+ 0x2b7c09,
+ 0x331308,
+ 0x33130f,
+ 0x2dfa86,
+ 0x2db10b,
+ 0x361545,
+ 0x361547,
+ 0x374c89,
+ 0x2171c6,
+ 0x32da87,
+ 0x2dde85,
+ 0x22f544,
+ 0x26e186,
+ 0x211984,
+ 0x2e6c47,
+ 0x34c5c8,
+ 0x4d2fb708,
+ 0x2fbe85,
+ 0x2fbfc7,
+ 0x245709,
+ 0x208444,
+ 0x208448,
+ 0x4d7190c8,
+ 0x23cdc4,
+ 0x230c88,
+ 0x3396c4,
+ 0x220389,
+ 0x333105,
+ 0x4da05bc2,
+ 0x2dfac5,
+ 0x2e6845,
+ 0x271b88,
+ 0x232847,
+ 0x4de03382,
+ 0x30cbc5,
+ 0x2d4e86,
+ 0x27a786,
+ 0x306f08,
+ 0x318308,
+ 0x327246,
+ 0x32e246,
+ 0x249009,
+ 0x345246,
+ 0x21708b,
+ 0x2a12c5,
+ 0x204686,
+ 0x382588,
+ 0x3152c6,
+ 0x298e46,
+ 0x21b94a,
+ 0x22f9ca,
+ 0x2e8245,
+ 0x35b8c7,
+ 0x2f0cc6,
+ 0x4e206602,
+ 0x21b1c7,
+ 0x2a9085,
+ 0x226b44,
+ 0x226b45,
+ 0x263046,
+ 0x27a447,
+ 0x20d405,
+ 0x22fb44,
+ 0x365008,
+ 0x298f05,
+ 0x33c8c7,
+ 0x39fa85,
+ 0x22df05,
+ 0x256b44,
+ 0x28fbc9,
+ 0x2ff988,
+ 0x2ecec6,
+ 0x2de9c6,
+ 0x2b9d46,
+ 0x4e700448,
+ 0x300647,
+ 0x3009cd,
+ 0x30120c,
+ 0x301809,
+ 0x301a49,
+ 0x4eb546c2,
+ 0x3a5503,
+ 0x20b303,
+ 0x2e1305,
+ 0x38ddca,
+ 0x327106,
+ 0x307905,
+ 0x30a084,
+ 0x30a08b,
+ 0x31bdcc,
+ 0x31c5cc,
+ 0x31c8d5,
+ 0x31d74d,
+ 0x31f44f,
+ 0x31f812,
+ 0x31fc8f,
+ 0x320052,
+ 0x3204d3,
+ 0x32098d,
+ 0x320f4d,
+ 0x3212ce,
+ 0x322a8e,
+ 0x3232cc,
+ 0x32368c,
+ 0x323acb,
+ 0x323e4e,
+ 0x324f92,
+ 0x326ecc,
+ 0x327610,
+ 0x3335d2,
+ 0x3347cc,
+ 0x334e8d,
+ 0x3351cc,
+ 0x337611,
+ 0x3384cd,
+ 0x33ac4d,
+ 0x33b24a,
+ 0x33b4cc,
+ 0x33bdcc,
+ 0x33c34c,
+ 0x33cbcc,
+ 0x33fc53,
+ 0x340450,
+ 0x340850,
+ 0x340e4d,
+ 0x34144c,
+ 0x342209,
+ 0x342f0d,
+ 0x343253,
+ 0x344911,
+ 0x344d53,
+ 0x34560f,
+ 0x3459cc,
+ 0x345ccf,
+ 0x34608d,
+ 0x34668f,
+ 0x346a50,
+ 0x3474ce,
+ 0x34ac8e,
+ 0x34b590,
+ 0x34ca8d,
+ 0x34d40e,
+ 0x34d78c,
+ 0x34e753,
+ 0x351e0e,
+ 0x352390,
+ 0x352791,
+ 0x352bcf,
+ 0x352f93,
+ 0x35424d,
+ 0x35458f,
+ 0x35494e,
+ 0x354fd0,
+ 0x3553c9,
+ 0x356390,
+ 0x356acf,
+ 0x35714f,
+ 0x357512,
+ 0x359e8e,
+ 0x35a74d,
+ 0x35cc4d,
+ 0x35cf8d,
+ 0x35f68d,
+ 0x35f9cd,
+ 0x35fd10,
+ 0x36010b,
+ 0x36058c,
+ 0x36090c,
+ 0x360c0c,
+ 0x360f0e,
+ 0x372c10,
+ 0x374452,
+ 0x3748cb,
+ 0x374ece,
+ 0x37524e,
+ 0x375ace,
+ 0x37604b,
+ 0x4ef76396,
+ 0x37724d,
+ 0x378354,
+ 0x378e0d,
+ 0x37ae55,
+ 0x37c04d,
+ 0x37c9cf,
+ 0x37d20f,
+ 0x38028f,
+ 0x38064e,
+ 0x380acd,
+ 0x382f11,
+ 0x385ecc,
+ 0x3861cc,
+ 0x3864cb,
+ 0x386c4c,
+ 0x38824f,
+ 0x388612,
+ 0x388fcd,
0x389f8c,
- 0x38a28d,
- 0x38a5cf,
- 0x38a98e,
- 0x38c88c,
- 0x38ce4d,
- 0x38d18b,
- 0x38e9cc,
- 0x38ef4d,
- 0x38f28e,
- 0x38f709,
- 0x3909d3,
- 0x3913cd,
- 0x39170d,
- 0x391d0c,
- 0x39218e,
- 0x392b0f,
- 0x392ecc,
- 0x3931cd,
- 0x39350f,
- 0x3938cc,
- 0x393fcc,
- 0x39444c,
- 0x39474c,
- 0x394e0d,
- 0x395152,
- 0x3957cc,
- 0x395acc,
- 0x395dd1,
- 0x39620f,
- 0x3965cf,
- 0x396993,
- 0x39764e,
- 0x397bcf,
- 0x397f8c,
- 0x48b982ce,
- 0x39864f,
- 0x398a16,
- 0x399c12,
- 0x39b88c,
- 0x39c24f,
- 0x39c8cd,
- 0x39cc0f,
- 0x39cfcc,
- 0x39d2cd,
- 0x39d60d,
- 0x39f4ce,
- 0x3a058c,
- 0x3a088c,
- 0x3a0b90,
- 0x3a3a91,
- 0x3a3ecb,
- 0x3a440c,
- 0x3a470e,
+ 0x38a40c,
+ 0x38a70d,
+ 0x38aa4f,
+ 0x38ae0e,
+ 0x38da8c,
+ 0x38e04d,
+ 0x38e38b,
+ 0x38ee8c,
+ 0x38f40d,
+ 0x38f74e,
+ 0x38fac9,
+ 0x390c53,
+ 0x39118d,
+ 0x3914cd,
+ 0x391acc,
+ 0x391f4e,
+ 0x39290f,
+ 0x392ccc,
+ 0x392fcd,
+ 0x39330f,
+ 0x3936cc,
+ 0x3943cc,
+ 0x39484c,
+ 0x394b4c,
+ 0x39520d,
+ 0x395552,
+ 0x396c0c,
+ 0x396f0c,
+ 0x397211,
+ 0x39764f,
+ 0x397a0f,
+ 0x397dd3,
+ 0x398a8e,
+ 0x398e0f,
+ 0x3991cc,
+ 0x4f39950e,
+ 0x39988f,
+ 0x399c56,
+ 0x39b312,
+ 0x39d64c,
+ 0x39e14f,
+ 0x39e7cd,
+ 0x39eb0f,
+ 0x39eecc,
+ 0x39f1cd,
+ 0x39f50d,
+ 0x3a0c4e,
+ 0x3a2b8c,
+ 0x3a2e8c,
+ 0x3a3190,
+ 0x3a4991,
+ 0x3a4dcb,
+ 0x3a510c,
+ 0x3a540e,
0x3a7051,
0x3a748e,
0x3a780d,
- 0x3ace8b,
- 0x3adbcf,
- 0x3aee94,
- 0x21c2c2,
- 0x21c2c2,
- 0x205903,
- 0x21c2c2,
- 0x205903,
- 0x21c2c2,
- 0x205e02,
- 0x3830c5,
+ 0x3aed0b,
+ 0x3afdcf,
+ 0x3b09d4,
+ 0x2630c2,
+ 0x2630c2,
+ 0x202583,
+ 0x2630c2,
+ 0x202583,
+ 0x2630c2,
+ 0x20ae82,
+ 0x372ac5,
0x3a6d4c,
- 0x21c2c2,
- 0x21c2c2,
- 0x205e02,
- 0x21c2c2,
- 0x290d45,
- 0x2a24c5,
- 0x21c2c2,
- 0x21c2c2,
- 0x211d42,
- 0x290d45,
- 0x312d49,
- 0x342b4c,
- 0x21c2c2,
- 0x21c2c2,
- 0x21c2c2,
- 0x21c2c2,
- 0x3830c5,
- 0x21c2c2,
- 0x21c2c2,
- 0x21c2c2,
- 0x21c2c2,
- 0x211d42,
- 0x312d49,
- 0x21c2c2,
- 0x21c2c2,
- 0x21c2c2,
- 0x2a24c5,
- 0x21c2c2,
- 0x2a24c5,
- 0x342b4c,
+ 0x2630c2,
+ 0x2630c2,
+ 0x20ae82,
+ 0x2630c2,
+ 0x29a385,
+ 0x212e05,
+ 0x2630c2,
+ 0x2630c2,
+ 0x211cc2,
+ 0x29a385,
+ 0x31e789,
+ 0x34460c,
+ 0x2630c2,
+ 0x2630c2,
+ 0x2630c2,
+ 0x2630c2,
+ 0x372ac5,
+ 0x2630c2,
+ 0x2630c2,
+ 0x2630c2,
+ 0x2630c2,
+ 0x211cc2,
+ 0x31e789,
+ 0x2630c2,
+ 0x2630c2,
+ 0x2630c2,
+ 0x212e05,
+ 0x2630c2,
+ 0x212e05,
+ 0x34460c,
0x3a6d4c,
- 0x323ac3,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x201604,
- 0x238483,
- 0x2264c3,
- 0x141388,
- 0x4db44,
- 0xed208,
- 0x200882,
- 0x49a16582,
- 0x240003,
- 0x22b944,
- 0x208f43,
- 0x21eb04,
- 0x231ac6,
- 0x31d243,
- 0x34aa44,
- 0x26cc05,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x24690a,
- 0x3a5946,
- 0x3757cc,
- 0x880c8,
- 0x216582,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x2348c3,
- 0x2cc5c6,
- 0x238483,
- 0x2264c3,
- 0x21bd03,
- 0xd42,
- 0xdb7c7,
- 0xca908,
- 0xfd8e,
- 0x85792,
- 0x2ecb,
- 0x4a71f345,
- 0x4ab76d0c,
- 0x131007,
- 0x16e747,
- 0x119b8a,
- 0x3c550,
- 0x2988,
- 0x16e847,
- 0xae14b,
- 0x112089,
- 0x173507,
- 0x10ec87,
- 0x77847,
- 0x169c6,
- 0x132d48,
- 0x4b01e1c6,
- 0xa910d,
- 0x119550,
- 0x4b400d82,
- 0x131948,
- 0x680c7,
- 0x84109,
- 0x53e06,
- 0x908c8,
- 0x5e82,
- 0x9c34a,
- 0x8e507,
- 0xeaec7,
- 0xa5449,
- 0xa7188,
- 0x157f45,
- 0xe168e,
- 0xe9ce,
- 0x14c4f,
- 0x15309,
- 0x33c49,
- 0x6528b,
- 0x7cdcf,
- 0x8cdcc,
- 0xdcbcb,
- 0xd99c8,
- 0x12bd07,
- 0xede48,
- 0x11e50b,
- 0x13e94c,
- 0x14624c,
- 0x14f98c,
- 0x1524cd,
- 0x2b848,
- 0x30cc2,
- 0x1afb89,
- 0x14c24b,
- 0xbdb06,
- 0xce6c5,
- 0xd2d10,
- 0x1229c6,
- 0x51f05,
- 0xd6908,
- 0xdc047,
- 0xdc307,
- 0x163287,
- 0xeba4a,
- 0xca78a,
- 0x161186,
- 0x8db8d,
- 0x180248,
- 0x45e88,
- 0x47a49,
- 0xeb58c,
- 0x1526cb,
- 0x171ac4,
- 0xf3109,
- 0x44bc6,
- 0x6202,
- 0x155646,
- 0xfefc7,
- 0x6c2,
- 0xc0e85,
- 0x481,
- 0x3b583,
- 0x4af9eb86,
- 0x90c43,
- 0x1f82,
- 0x3a4c4,
+ 0x368883,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x2964c4,
+ 0x204ac3,
+ 0x200383,
+ 0x1f08,
+ 0x15444,
+ 0xc1348,
+ 0x204cc2,
+ 0x5020d1c2,
+ 0x243403,
+ 0x24c944,
+ 0x202743,
+ 0x38e8c4,
+ 0x22e886,
+ 0x213843,
+ 0x31aa84,
+ 0x288845,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x25084a,
+ 0x241f46,
+ 0x3755cc,
+ 0x15f048,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x22d603,
+ 0x201686,
+ 0x204ac3,
+ 0x200383,
+ 0x21aa03,
+ 0xaa288,
+ 0x3942,
+ 0x513856c5,
+ 0x2ac47,
+ 0xd7a88,
+ 0xc0ce,
+ 0x8c792,
+ 0x16780b,
+ 0x516db445,
+ 0x51adb44c,
+ 0xf207,
+ 0x13ecc7,
+ 0x1698ca,
+ 0x3efd0,
+ 0x1acd05,
+ 0x16e1cb,
+ 0x1672c8,
+ 0x13edc7,
+ 0x2f64b,
+ 0x11dd09,
+ 0x150f47,
+ 0x1b3c47,
+ 0x81187,
+ 0x20586,
+ 0x94b88,
+ 0x52028b86,
+ 0xafbcd,
+ 0x169290,
+ 0x52401742,
+ 0xfb48,
+ 0x71f47,
+ 0x7f149,
+ 0x59b46,
+ 0x99f08,
+ 0x74842,
+ 0xa4f4a,
+ 0x2d587,
+ 0x3b9c7,
+ 0xaa689,
+ 0xad708,
+ 0x15ae05,
+ 0x194e8e,
+ 0x14d4e,
+ 0x26f4f,
+ 0x2ccc9,
+ 0x4c809,
+ 0x77e8b,
+ 0x878cf,
+ 0x8fdcc,
+ 0xadd8b,
+ 0xc4d08,
+ 0xdc507,
+ 0x162908,
+ 0xfe04b,
+ 0x12a54c,
+ 0x141acc,
+ 0x147f4c,
+ 0x14b0cd,
+ 0x17de88,
+ 0x42602,
+ 0x104389,
+ 0x18528b,
+ 0xc8886,
+ 0x116f8b,
+ 0xdd5ca,
+ 0xde185,
+ 0xe4a90,
+ 0x1294c6,
+ 0x63c85,
+ 0xe6448,
+ 0xee547,
+ 0xee807,
+ 0x5e987,
+ 0xf92ca,
+ 0xd790a,
+ 0x177ac6,
+ 0x97ccd,
+ 0x1ae208,
+ 0x56608,
+ 0x56a89,
+ 0xb9905,
+ 0x19de4c,
+ 0x14b2cb,
+ 0x171c84,
+ 0xff749,
+ 0x8146,
+ 0x16c2,
+ 0x125886,
+ 0x10d947,
+ 0x6c82,
+ 0xcb605,
+ 0x29b04,
+ 0x701,
+ 0x2bc43,
+ 0x51fadbc6,
+ 0x9a283,
+ 0x8a42,
+ 0x2d584,
+ 0x1442,
+ 0x4ae04,
+ 0x1342,
+ 0x2f82,
+ 0x3682,
+ 0x1124c2,
+ 0xe542,
+ 0xdb442,
+ 0x2ac2,
+ 0x1c402,
+ 0x26982,
+ 0x4d02,
+ 0x3b02,
+ 0x34682,
+ 0x31b83,
+ 0x7d02,
+ 0x1c2,
+ 0x41c2,
+ 0xda42,
+ 0x642,
+ 0xdc2,
+ 0x18d82,
+ 0x1a02,
+ 0x2282,
+ 0x1d42,
+ 0x4303,
+ 0xb02,
+ 0x2f02,
+ 0xb5e02,
+ 0x1b02,
+ 0x5d82,
+ 0x32c2,
+ 0x73c2,
+ 0x17c2,
+ 0x1f02,
+ 0x173102,
+ 0x73fc2,
+ 0x5e402,
+ 0x4ac3,
+ 0x2c2,
+ 0x9282,
0x1002,
- 0x24104,
- 0x9c2,
- 0x1182,
- 0x3182,
- 0x4f882,
- 0x2ec2,
- 0x104e82,
- 0x8c2,
- 0x1dec2,
- 0x37e42,
+ 0x14602,
+ 0x1724c5,
+ 0x6ec2,
+ 0x1202,
+ 0x41703,
0x682,
- 0xf82,
- 0xb1d82,
- 0x343c3,
- 0x8042,
- 0x202,
- 0x6ac2,
- 0x21842,
- 0xb2c2,
- 0x32a02,
- 0xf1c2,
- 0x42,
- 0x5602,
- 0xa82,
- 0x2243,
- 0x74c2,
- 0x1982,
- 0xb09c2,
- 0x9682,
- 0xb402,
- 0x61c2,
- 0xa242,
- 0x9a1c2,
- 0x6742,
- 0x172e82,
- 0xe02,
- 0x9f82,
- 0x38483,
- 0x1dc2,
- 0x8382,
- 0x25c2,
- 0x2182,
- 0x46045,
- 0x6a42,
- 0x41542,
- 0x3e503,
- 0x4b42,
- 0x7982,
- 0x1402,
- 0x15c2,
- 0x1882,
- 0xcc2,
- 0x3282,
- 0x6202,
- 0x6b247,
- 0x212d03,
- 0x200882,
- 0x22d183,
- 0x2343c3,
- 0x211cc3,
- 0x201d83,
- 0x2348c3,
- 0x238483,
- 0x2025c3,
- 0x2264c3,
- 0x290c83,
- 0x880c8,
- 0x22d183,
- 0x2343c3,
- 0x211cc3,
- 0x211003,
- 0x238483,
- 0x2025c3,
- 0x2264c3,
- 0x22d183,
- 0x2343c3,
- 0x2264c3,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
+ 0xd42,
+ 0x1702,
+ 0xe5c2,
+ 0x1ac2,
+ 0x3382,
+ 0x6902,
+ 0x16c2,
+ 0x73c07,
+ 0x213dc3,
+ 0x204cc2,
+ 0x2d0783,
+ 0x231b83,
+ 0x2135c3,
+ 0x201d43,
+ 0x22d603,
+ 0x204ac3,
+ 0x20abc3,
+ 0x200383,
+ 0x29a2c3,
+ 0x1a5c3,
+ 0x15f048,
+ 0x2d0783,
+ 0x231b83,
+ 0x2135c3,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x20abc3,
+ 0x200383,
+ 0x2d0783,
+ 0x231b83,
+ 0x200383,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
0x200041,
- 0x211003,
- 0x238483,
- 0x201f43,
- 0x2264c3,
- 0x323ac3,
- 0x22d183,
- 0x2343c3,
- 0x25f643,
- 0x211cc3,
- 0x3112c3,
- 0x27cc03,
- 0x201f83,
- 0x25a603,
- 0x21eb03,
- 0x201604,
- 0x238483,
- 0x2264c3,
- 0x223ec3,
- 0x305fc4,
- 0x21e143,
- 0x4803,
- 0x203e03,
- 0x2a0cc8,
- 0x332a44,
- 0x317f8a,
- 0x330786,
- 0xda404,
- 0x3a2e47,
- 0x22138a,
- 0x347689,
- 0x3b3507,
- 0x20054a,
- 0x323ac3,
- 0x3822cb,
- 0x368b49,
- 0x2c4005,
- 0x2ca007,
- 0x16582,
- 0x22d183,
- 0x326647,
- 0x22a1c5,
- 0x2d60c9,
- 0x2343c3,
- 0x227846,
- 0x2ba0c3,
- 0x9f543,
- 0xfaa86,
- 0x4f4c6,
- 0x11d1c7,
- 0x3a8786,
- 0x213e45,
- 0x20c507,
- 0x338b87,
- 0x4d61eb03,
- 0x329007,
- 0x35eec3,
- 0x38e705,
- 0x201604,
- 0x221c08,
- 0x2af6cc,
- 0x2ad6c5,
- 0x363c06,
- 0x326507,
- 0x224b47,
- 0x205087,
- 0x206e48,
- 0x2597cf,
- 0x280b05,
- 0x240107,
- 0x27e347,
- 0x2a500a,
- 0x2ee209,
- 0x2d7185,
- 0x2d830a,
- 0xdea46,
- 0x2ba145,
- 0x374b84,
- 0x2b7486,
- 0x2fe5c7,
- 0x230bc7,
- 0x2a0a08,
- 0x214805,
- 0x22a0c6,
- 0x3a8245,
- 0x37a445,
- 0x21fd44,
- 0x31e907,
- 0x347cca,
- 0x365a48,
- 0x2edb86,
- 0x348c3,
- 0x2cf145,
- 0x238d06,
- 0x200346,
- 0x251e06,
- 0x211003,
- 0x388dc7,
- 0x27e2c5,
- 0x238483,
- 0x3b378d,
- 0x2025c3,
- 0x2a0b08,
- 0x3aac44,
- 0x205fc5,
- 0x2a4f06,
- 0x236b06,
- 0x20d6c7,
- 0x355747,
- 0x2641c5,
- 0x2264c3,
- 0x322c07,
- 0x33b009,
- 0x258f49,
- 0x2434ca,
- 0x242a42,
- 0x38e6c4,
- 0x2d7ac4,
- 0x210d87,
- 0x236d08,
- 0x2dce89,
- 0x3a3489,
- 0x2df807,
- 0x334206,
- 0xe1406,
- 0x2e26c4,
- 0x2e2cca,
- 0x2e5c88,
- 0x2e64c9,
- 0x2b6306,
- 0x3003c5,
- 0x365908,
- 0x2bf10a,
- 0x25b743,
- 0x306146,
- 0x2df907,
- 0x207c85,
- 0x3aab05,
- 0x242083,
- 0x252dc4,
- 0x21bf45,
- 0x27e747,
- 0x39fa45,
- 0x2f3bc6,
- 0xfa705,
- 0x212a43,
- 0x21cdc9,
- 0x238dcc,
- 0x2ab90c,
- 0x2c65c8,
- 0x28f8c7,
- 0x2ef748,
- 0x2efa8a,
- 0x2f0a4b,
- 0x368c88,
- 0x363d08,
- 0x36ee86,
- 0x341985,
- 0x36498a,
- 0x21ebc5,
- 0x203e42,
- 0x2bcdc7,
- 0x26a8c6,
- 0x353505,
- 0x2f1949,
- 0x38dec5,
- 0x376785,
- 0x38e2c9,
- 0x238b86,
- 0x261b88,
- 0x2d1343,
- 0x3a88c6,
- 0x270f06,
- 0x2fdcc5,
- 0x2fdcc9,
- 0x2dd5c9,
- 0x242d87,
- 0xfdb44,
- 0x2fdb47,
- 0x3a3389,
- 0x221585,
- 0x16f208,
- 0x355545,
- 0x355245,
- 0x399309,
- 0x201482,
- 0x21df44,
- 0x202e82,
- 0x2074c2,
- 0x293c45,
- 0x2da188,
- 0x374e45,
- 0x2bc883,
- 0x2bc885,
- 0x2ca3c3,
- 0x2111c2,
- 0x264a04,
- 0x233503,
- 0x207a82,
- 0x358704,
- 0x2d8003,
- 0x2014c2,
- 0x293cc3,
- 0x2898c4,
- 0x2d7703,
- 0x23a804,
- 0x201bc2,
- 0x21bc03,
- 0x219283,
- 0x208d82,
- 0x35b202,
- 0x2dd409,
- 0x2011c2,
- 0x286304,
- 0x200dc2,
- 0x365784,
- 0x3341c4,
- 0x3a1cc4,
- 0x206202,
- 0x23e802,
- 0x20dc03,
- 0x2f0083,
- 0x23f704,
- 0x27e8c4,
- 0x2d13c4,
- 0x2dd7c4,
- 0x2fd083,
- 0x3491c3,
- 0x2de9c4,
- 0x2fee04,
- 0x2ff346,
- 0x260dc2,
- 0x216582,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x200882,
- 0x323ac3,
- 0x22d183,
- 0x2343c3,
- 0x205403,
- 0x21eb03,
- 0x201604,
- 0x2dd6c4,
- 0x212444,
- 0x238483,
- 0x2264c3,
- 0x21bd03,
- 0x2e3444,
- 0x29e943,
- 0x2b3783,
- 0x3436c4,
- 0x355346,
- 0x20ca03,
- 0x16e747,
- 0x219b83,
- 0x208143,
- 0x2b1a03,
- 0x206003,
- 0x2348c3,
- 0x376f85,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x2db443,
- 0x230743,
- 0x880c8,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x202243,
- 0x238483,
- 0x234fc4,
- 0x2264c3,
- 0x29b704,
- 0x2b7285,
- 0x16e747,
- 0x216582,
- 0x201a42,
- 0x201f82,
- 0x205902,
- 0x201502,
- 0x22d183,
- 0x2374c4,
- 0x2343c3,
- 0x21eb03,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x880c8,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x211003,
- 0x212444,
- 0x238483,
- 0x2264c3,
- 0x217643,
- 0x224104,
- 0x880c8,
- 0x22d183,
- 0x2025c3,
- 0x245dc4,
- 0x880c8,
- 0x22d183,
- 0x247344,
- 0x201604,
- 0x2025c3,
- 0x202282,
- 0x2264c3,
- 0x215cc3,
- 0x52dc4,
- 0x2e9cc5,
- 0x203e42,
- 0x2fef43,
- 0x200882,
- 0x880c8,
- 0x216582,
- 0x2343c3,
- 0x21eb03,
- 0x200a82,
- 0x2264c3,
- 0x200882,
- 0x200707,
- 0x254705,
- 0x29f844,
- 0x385f86,
- 0x366a4b,
- 0x263a49,
- 0x363b46,
- 0x340a89,
- 0x2b2c88,
- 0x207103,
- 0x880c8,
- 0x22a807,
- 0x364288,
- 0x24f843,
- 0x21d184,
- 0x2226cb,
- 0x259145,
- 0x24b188,
- 0x2f2ec9,
- 0x25a203,
- 0x22d183,
- 0x205348,
- 0x2ee787,
- 0x24fe46,
- 0x2343c3,
- 0x24f947,
- 0x21eb03,
- 0x339b06,
- 0x202243,
- 0x22f9c7,
- 0x33a6c7,
- 0x390e87,
- 0x31e885,
- 0x209403,
- 0x205dcb,
- 0x36b4c8,
- 0x227548,
- 0x33b1c6,
- 0x367989,
- 0x335b07,
- 0x2f9145,
- 0x339444,
- 0x3478c8,
- 0x23d54a,
- 0x23d789,
- 0x346f03,
- 0x2696c5,
- 0x21bb83,
- 0x3ad706,
- 0x387704,
- 0x2fdec8,
- 0x38748b,
- 0x346dc5,
- 0x2b7006,
- 0x2b8e85,
- 0x2b9608,
- 0x2ba287,
- 0x206cc7,
- 0x317b87,
- 0x294544,
- 0x30a5c7,
- 0x294546,
- 0x211003,
- 0x2c2088,
- 0x268383,
- 0x2cab08,
- 0x2d3f45,
- 0x3251c8,
- 0x2345c7,
- 0x238483,
- 0x2447c3,
- 0x287dc4,
- 0x323647,
- 0x208fc3,
- 0x33a78b,
- 0x205003,
- 0x268344,
- 0x2e9d48,
- 0x2264c3,
- 0x2f3d45,
- 0x311145,
- 0x3250c6,
- 0x2117c5,
- 0x2d4304,
- 0x202002,
- 0x2e69c3,
- 0x374c0a,
- 0x3a1583,
- 0x306709,
- 0x30a2c6,
- 0x204e48,
- 0x289406,
- 0x214347,
- 0x2db948,
- 0x39a588,
- 0x2ebd43,
- 0x293d03,
- 0x272c09,
- 0x2f4c83,
- 0x2d8d06,
- 0x254386,
- 0x39f7c6,
- 0x3a1e09,
- 0x2fd784,
- 0x20e3c3,
- 0x2d6d05,
- 0x349589,
- 0x206dc3,
- 0x35a244,
- 0x2f2ac4,
- 0x36fc84,
- 0x35f906,
- 0x3b4303,
- 0x3b4308,
- 0x256a08,
- 0x39db86,
- 0x2f8f4b,
- 0x2f9288,
- 0x2f948b,
- 0x2fb949,
- 0x2fa987,
- 0x2fbdc8,
- 0x2fc983,
- 0x22ad86,
- 0x3a9247,
- 0x295245,
- 0x34b789,
- 0x33530d,
- 0x204c91,
- 0x22eb85,
- 0x200882,
- 0x216582,
- 0x22d183,
- 0x2343c3,
- 0x22d684,
- 0x21eb03,
- 0x202243,
- 0x211003,
- 0x238483,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x2348c3,
- 0x238483,
- 0x2264c3,
- 0x265903,
- 0x217643,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x201604,
- 0x2348c3,
- 0x238483,
- 0x2264c3,
- 0x221e42,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x2104c3,
+ 0x200383,
+ 0x368883,
+ 0x2d0783,
+ 0x231b83,
+ 0x20fb43,
+ 0x2135c3,
+ 0x2300c3,
+ 0x287703,
+ 0x210503,
+ 0x234743,
+ 0x332ec3,
+ 0x2964c4,
+ 0x204ac3,
+ 0x200383,
+ 0x24abc3,
+ 0x200604,
+ 0x250c83,
+ 0x5283,
+ 0x3abd03,
+ 0x329b88,
+ 0x2e8384,
+ 0x2c264a,
+ 0x224906,
+ 0x10f9c4,
+ 0x38c2c7,
+ 0x21eeca,
+ 0x2df949,
+ 0x3a3b07,
+ 0x3a7dca,
+ 0x368883,
+ 0x2e900b,
+ 0x303349,
+ 0x2b9e45,
+ 0x2d7187,
+ 0xd1c2,
+ 0x2d0783,
+ 0x204d07,
+ 0x248d45,
+ 0x2e1cc9,
+ 0x231b83,
+ 0x233606,
+ 0x2c56c3,
+ 0xe1183,
+ 0x109686,
+ 0x60546,
+ 0x137c7,
+ 0x217546,
+ 0x222645,
+ 0x2cf187,
+ 0x2da587,
+ 0x54b32ec3,
+ 0x334a07,
+ 0x3642c3,
+ 0x3a2385,
+ 0x2964c4,
+ 0x32e3c8,
+ 0x2751cc,
+ 0x3a5745,
+ 0x2a2086,
+ 0x204bc7,
+ 0x37ef47,
+ 0x25b8c7,
+ 0x31f248,
+ 0x307ecf,
+ 0x2dfb85,
+ 0x243507,
+ 0x2394c7,
+ 0x2a9b0a,
+ 0x2d7e49,
+ 0x30bc85,
+ 0x32194a,
+ 0x1b06,
+ 0x2c5745,
+ 0x376284,
+ 0x289dc6,
+ 0x2f8cc7,
+ 0x242507,
+ 0x38cbc8,
+ 0x214185,
+ 0x248c46,
+ 0x20c545,
+ 0x387845,
+ 0x212c04,
+ 0x2e3f87,
+ 0x20900a,
+ 0x234d48,
+ 0x356946,
+ 0x2d603,
+ 0x2e0405,
+ 0x26c686,
+ 0x3a46c6,
+ 0x263b86,
+ 0x20fbc3,
+ 0x389247,
+ 0x239445,
+ 0x204ac3,
+ 0x2dd88d,
+ 0x20abc3,
+ 0x38ccc8,
+ 0x39a5c4,
+ 0x27ba85,
+ 0x2a9a06,
+ 0x2362c6,
+ 0x204587,
+ 0x2ae707,
+ 0x270b05,
+ 0x200383,
+ 0x27f2c7,
+ 0x329709,
+ 0x22b689,
+ 0x2f590a,
+ 0x24cd82,
+ 0x3a2344,
+ 0x2e76c4,
+ 0x261787,
+ 0x2278c8,
+ 0x2ef309,
+ 0x21f1c9,
+ 0x2f0487,
+ 0x303806,
+ 0xf22c6,
+ 0x2f39c4,
+ 0x2f3fca,
+ 0x2f6a08,
+ 0x2f6fc9,
+ 0x2bfe86,
+ 0x2b6ec5,
+ 0x234c08,
+ 0x2c9c4a,
+ 0x22c6c3,
+ 0x200786,
+ 0x2f0587,
+ 0x217f85,
+ 0x39a485,
+ 0x2717c3,
+ 0x258a04,
+ 0x36da85,
+ 0x288e47,
+ 0x2ffac5,
+ 0x2ed686,
+ 0xfff05,
+ 0x264a03,
+ 0x28b789,
+ 0x27b84c,
+ 0x2a7e0c,
+ 0x2d3bc8,
+ 0x3ade87,
+ 0x2fc8c8,
+ 0x2fcc0a,
+ 0x2fd84b,
+ 0x303488,
+ 0x33f408,
+ 0x2363c6,
+ 0x262685,
+ 0x200f4a,
+ 0x219545,
+ 0x205bc2,
+ 0x2c7a87,
+ 0x2a32c6,
+ 0x355ec5,
+ 0x38e989,
+ 0x26b785,
+ 0x285ec5,
+ 0x3a1f49,
+ 0x257cc6,
+ 0x3b1088,
+ 0x23e0c3,
+ 0x3b3306,
+ 0x27ac06,
+ 0x30ba85,
+ 0x30ba89,
+ 0x2bc289,
+ 0x24d0c7,
+ 0x10b904,
+ 0x30b907,
+ 0x21f0c9,
+ 0x23c905,
+ 0x4bbc8,
+ 0x3b3205,
+ 0x339505,
+ 0x376c89,
+ 0x205ac2,
+ 0x2e95c4,
+ 0x20d782,
+ 0x200b02,
+ 0x2ce985,
+ 0x30f748,
+ 0x2b9845,
+ 0x2c6fc3,
+ 0x2c6fc5,
+ 0x2d7543,
+ 0x210882,
+ 0x2e30c4,
+ 0x351903,
+ 0x204c82,
+ 0x35bb44,
+ 0x2e85c3,
+ 0x200e82,
+ 0x25e903,
+ 0x291704,
+ 0x2e7083,
+ 0x246f04,
+ 0x202602,
+ 0x21a903,
+ 0x215b43,
+ 0x206342,
+ 0x33c282,
+ 0x2bc0c9,
+ 0x202d82,
+ 0x28d304,
+ 0x201782,
+ 0x234a84,
+ 0x3037c4,
+ 0x2bcc44,
+ 0x2016c2,
+ 0x241a02,
+ 0x220883,
+ 0x225f83,
+ 0x387944,
+ 0x269e44,
+ 0x2bc484,
+ 0x2ce884,
+ 0x30b143,
+ 0x34f743,
+ 0x201a84,
+ 0x30d784,
+ 0x30e786,
+ 0x2e7782,
+ 0x20d1c2,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x204cc2,
+ 0x368883,
+ 0x2d0783,
+ 0x231b83,
+ 0x2001c3,
+ 0x332ec3,
+ 0x2964c4,
+ 0x2bc384,
+ 0x213184,
+ 0x204ac3,
+ 0x200383,
+ 0x21aa03,
+ 0x2f4684,
+ 0x32f983,
+ 0x2bf3c3,
+ 0x345184,
+ 0x3b3006,
+ 0x211503,
+ 0x13ecc7,
+ 0x234fc3,
+ 0x23a943,
+ 0x2b6703,
+ 0x265383,
+ 0x22d603,
+ 0x2db6c5,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x2ed143,
+ 0x2ab343,
+ 0x15f048,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204303,
+ 0x204ac3,
+ 0x23ee04,
+ 0x200383,
+ 0x26a104,
+ 0x2c2d45,
+ 0x13ecc7,
+ 0x20d1c2,
+ 0x2000c2,
+ 0x208a42,
+ 0x202082,
+ 0x200382,
+ 0x2d0783,
+ 0x23a184,
+ 0x231b83,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x15f048,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x213184,
+ 0x204ac3,
+ 0x200383,
+ 0x213e83,
+ 0x24ae04,
+ 0x15f048,
+ 0x2d0783,
+ 0x20abc3,
+ 0x1a5c3,
+ 0x24fe44,
+ 0x15f048,
+ 0x2d0783,
+ 0x251304,
+ 0x2964c4,
+ 0x20abc3,
+ 0x201882,
+ 0x200383,
+ 0x2202c3,
+ 0x58a04,
+ 0x370145,
+ 0x205bc2,
+ 0x30d8c3,
+ 0x204cc2,
+ 0x15f048,
+ 0x20d1c2,
+ 0x231b83,
+ 0x332ec3,
+ 0x201d42,
+ 0x200383,
+ 0x204cc2,
+ 0x15f048,
+ 0x231b83,
+ 0x332ec3,
+ 0x204303,
+ 0x20fbc3,
+ 0x30b544,
+ 0x204cc2,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x231b83,
+ 0x2da904,
+ 0x332ec3,
+ 0x204303,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x22d603,
+ 0x204ac3,
+ 0x200383,
+ 0x26a103,
+ 0x213e83,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x1a5c3,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x2964c4,
+ 0x22d603,
+ 0x204ac3,
+ 0x200383,
+ 0x217082,
0x200141,
- 0x200882,
+ 0x204cc2,
0x200001,
- 0x313b02,
- 0x880c8,
- 0x220045,
- 0x200481,
- 0x2d183,
- 0x200741,
- 0x200081,
- 0x200c81,
- 0x2333c2,
- 0x36e144,
- 0x383043,
- 0x2007c1,
- 0x200901,
- 0x200041,
- 0x2001c1,
- 0x2dda87,
- 0x2b8f8f,
- 0x2cacc6,
+ 0x31f542,
+ 0x15f048,
+ 0x21d105,
+ 0x200701,
+ 0xd0783,
+ 0x200101,
0x2000c1,
- 0x25b806,
- 0x200341,
- 0x200ac1,
- 0x341ece,
- 0x201501,
- 0x2264c3,
- 0x2014c1,
- 0x260e05,
- 0x202002,
- 0x241f85,
- 0x200b81,
+ 0x201e41,
+ 0x29da82,
+ 0x36da04,
+ 0x372a43,
+ 0x200181,
+ 0x200941,
+ 0x200041,
+ 0x200081,
+ 0x2ed7c7,
+ 0x2eeccf,
+ 0x2fc146,
+ 0x201481,
+ 0x289786,
+ 0x200c01,
+ 0x2002c1,
+ 0x33168e,
+ 0x200381,
+ 0x200383,
+ 0x200e81,
+ 0x279e45,
+ 0x210582,
+ 0x2716c5,
+ 0x2003c1,
+ 0x200201,
0x200241,
+ 0x205bc2,
0x200a01,
- 0x203e42,
- 0x2002c1,
- 0x204701,
- 0x20dec1,
- 0x200781,
- 0x200641,
- 0x880c8,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x21ca03,
- 0x22d183,
- 0x21eb03,
- 0x89ec8,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x14da788,
- 0x880c8,
- 0x441c4,
- 0x880c8,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x204803,
- 0x880c8,
- 0x22d183,
- 0x2343c3,
- 0x22d684,
- 0x2264c3,
- 0x28fb85,
- 0x27f304,
- 0x22d183,
- 0x238483,
- 0x2264c3,
- 0xa014a,
- 0x216582,
- 0x22d183,
- 0x2326c9,
- 0x2343c3,
- 0x23af09,
- 0x21eb03,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x2e24c8,
- 0x2100c7,
- 0x2e9cc5,
- 0x200707,
- 0x366a4b,
- 0x365188,
- 0x340a89,
- 0x22a807,
- 0x205348,
- 0x339b06,
- 0x33a6c7,
- 0x227548,
- 0x33b1c6,
- 0x335b07,
- 0x23d789,
- 0x37c409,
- 0x2b7006,
- 0x2b7e45,
- 0x2c2088,
- 0x268383,
- 0x2cab08,
- 0x2345c7,
- 0x208fc3,
- 0x326387,
- 0x2117c5,
- 0x2dc608,
- 0x310205,
- 0x293d03,
- 0x33b9c9,
- 0x2aa9c7,
- 0x35a244,
- 0x2f2ac4,
- 0x2f8f4b,
- 0x2f9288,
- 0x2fa987,
- 0x22d183,
- 0x2343c3,
- 0x211cc3,
- 0x2264c3,
- 0x21e503,
- 0x21eb03,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x653cb,
- 0x200882,
- 0x216582,
- 0x2264c3,
- 0x880c8,
- 0x200882,
- 0x216582,
- 0x201f82,
- 0x200a82,
- 0x200342,
- 0x238483,
- 0x201502,
- 0x200882,
- 0x323ac3,
- 0x216582,
- 0x22d183,
- 0x2343c3,
- 0x201f82,
- 0x21eb03,
- 0x202243,
- 0x211003,
- 0x212444,
- 0x238483,
- 0x21ab43,
- 0x2264c3,
- 0x2fd784,
- 0x223ec3,
- 0x21eb03,
- 0x216582,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x211003,
- 0x238483,
- 0x2025c3,
- 0x2264c3,
- 0x39bd47,
- 0x22d183,
- 0x256b87,
- 0x2edfc6,
- 0x219203,
- 0x206ac3,
- 0x21eb03,
- 0x220883,
- 0x201604,
- 0x284804,
- 0x2d43c6,
- 0x20bac3,
- 0x238483,
- 0x2264c3,
- 0x28fb85,
- 0x20d4c4,
- 0x31a083,
- 0x217a03,
- 0x2bcdc7,
- 0x20b445,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x219f02,
- 0x380383,
- 0x2b2c83,
- 0x323ac3,
- 0x5822d183,
- 0x22b782,
- 0x2343c3,
- 0x208f43,
- 0x21eb03,
- 0x201604,
- 0x36b683,
- 0x280b03,
- 0x211003,
- 0x212444,
- 0x58606bc2,
- 0x238483,
- 0x2264c3,
- 0x232dc3,
- 0x245483,
- 0x221e42,
- 0x223ec3,
- 0x880c8,
- 0x21eb03,
- 0x307e44,
- 0x323ac3,
- 0x216582,
- 0x22d183,
- 0x2374c4,
- 0x2343c3,
- 0x21eb03,
- 0x201604,
- 0x202243,
- 0x2f5d44,
- 0x307b04,
- 0x2cc5c6,
- 0x212444,
- 0x238483,
- 0x2264c3,
+ 0x201a81,
+ 0x2005c1,
+ 0x2007c1,
+ 0x200cc1,
+ 0x15f048,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
0x21bd03,
- 0x26a8c6,
- 0x1737cb,
- 0x1e1c6,
- 0x23d0a,
- 0xfcb8a,
- 0x880c8,
- 0x3a8204,
- 0x22d183,
- 0x323a84,
- 0x2343c3,
- 0x247b84,
- 0x21eb03,
- 0x251283,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x32248b,
- 0x39d94a,
- 0x3b298c,
- 0x200882,
- 0x216582,
- 0x201f82,
- 0x2a9c05,
- 0x201604,
- 0x206742,
- 0x211003,
- 0x307b04,
- 0x205902,
- 0x201502,
- 0x217642,
- 0x221e42,
- 0x123ac3,
- 0x357309,
- 0x254208,
- 0x301189,
- 0x33a509,
- 0x35bd8a,
- 0x23808a,
- 0x20cc82,
- 0x21dec2,
- 0x16582,
- 0x22d183,
- 0x200bc2,
- 0x2402c6,
- 0x354502,
- 0x202982,
- 0x3861ce,
- 0x21bc4e,
- 0x278107,
- 0x32fe47,
- 0x26b302,
- 0x2343c3,
- 0x21eb03,
- 0x202842,
- 0x200a82,
- 0x23d1cf,
- 0x204ec2,
- 0x33b3c7,
- 0x24cf87,
- 0x256107,
- 0x26204c,
- 0x268b4c,
- 0x2057c4,
- 0x2696ca,
- 0x21bb82,
- 0x209682,
- 0x2b2684,
- 0x215bc2,
- 0x2bb4c2,
- 0x268d84,
- 0x21ac42,
- 0x20b402,
- 0x33b247,
- 0x233285,
- 0x20a242,
- 0x23d144,
- 0x372e82,
- 0x2cea08,
- 0x238483,
- 0x3a2308,
- 0x203082,
- 0x235885,
- 0x3a25c6,
- 0x2264c3,
- 0x206a42,
- 0x2dd0c7,
- 0x2002,
- 0x26ccc5,
- 0x393e85,
- 0x2166c2,
- 0x226442,
- 0x31864a,
- 0x26404a,
- 0x210fc2,
- 0x376c04,
- 0x201a02,
- 0x38e588,
+ 0x2d0783,
+ 0x332ec3,
+ 0x91d48,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x48803,
+ 0x200383,
+ 0x14ebc48,
+ 0x15f048,
+ 0x4dcc4,
+ 0x15f048,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x205283,
+ 0x15f048,
+ 0x2d0783,
+ 0x231b83,
+ 0x2da904,
+ 0x200383,
+ 0x293ac5,
+ 0x343984,
+ 0x2d0783,
+ 0x204ac3,
+ 0x200383,
+ 0x16b18a,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x22f489,
+ 0x231b83,
+ 0x2d2389,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x2f37c8,
+ 0x226647,
+ 0x370145,
+ 0x3a7f87,
+ 0x26b0cb,
+ 0x215cc8,
+ 0x32eac9,
+ 0x228087,
+ 0x200108,
+ 0x36f906,
+ 0x2344c7,
+ 0x29c108,
+ 0x2ab806,
+ 0x31d407,
+ 0x2aa449,
+ 0x2ba749,
+ 0x2c2ac6,
+ 0x2c38c5,
+ 0x2cce08,
+ 0x2b4783,
+ 0x2d7c88,
+ 0x231d87,
+ 0x206583,
+ 0x31d287,
+ 0x217905,
+ 0x2eeb08,
+ 0x359105,
+ 0x2cea43,
+ 0x23c289,
+ 0x2b0e87,
+ 0x35d504,
+ 0x2ff244,
+ 0x307ccb,
+ 0x308288,
+ 0x309587,
+ 0x2d0783,
+ 0x231b83,
+ 0x2135c3,
+ 0x200383,
+ 0x236ec3,
+ 0x332ec3,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x77fcb,
0x204cc2,
- 0x2fd448,
- 0x2f64c7,
- 0x2f67c9,
- 0x26cd42,
- 0x2fbb85,
- 0x2546c5,
- 0x2148cb,
- 0x2bfdcc,
- 0x22f848,
- 0x2fbf48,
- 0x260dc2,
- 0x20d782,
- 0x200882,
- 0x880c8,
- 0x216582,
- 0x22d183,
- 0x201f82,
- 0x205902,
- 0x201502,
- 0x2264c3,
- 0x217642,
- 0x200882,
- 0x5a616582,
- 0x5aa1eb03,
- 0x332683,
- 0x206742,
- 0x238483,
- 0x364e83,
- 0x2264c3,
- 0x2db083,
- 0x26b346,
- 0x1617643,
- 0x880c8,
- 0x51f05,
- 0xa7dcd,
- 0x5f007,
- 0x5b200182,
- 0x5b601002,
- 0x5ba04802,
- 0x5be01842,
- 0x5c2108c2,
- 0x5c602ec2,
- 0x16e747,
- 0x5ca16582,
- 0x5ce30542,
- 0x5d21e582,
- 0x5d600f82,
- 0x21bc43,
- 0x1b4284,
- 0x20ddc3,
- 0x5da18fc2,
- 0x5de038c2,
- 0x47887,
- 0x5e214b82,
- 0x5e600902,
- 0x5ea02ac2,
- 0x5ee082c2,
- 0x5f205602,
- 0x5f600a82,
- 0xb97c5,
- 0x226743,
- 0x30ec04,
- 0x5fa15bc2,
- 0x5fe16c82,
- 0x60200102,
- 0x7508b,
- 0x60600982,
- 0x60e09782,
- 0x61206742,
- 0x61600342,
- 0x61a50042,
- 0x61e03042,
- 0x6220e842,
- 0x62600e02,
- 0x62a06bc2,
- 0x62e01302,
- 0x63205902,
- 0x6361d302,
- 0x63a04242,
- 0x63e425c2,
- 0x133184,
- 0x371183,
- 0x64206602,
- 0x64613942,
- 0x64a06942,
- 0x64e03742,
- 0x65201502,
- 0x65607a82,
- 0x65547,
- 0x65a07442,
- 0x65e07482,
- 0x66217642,
- 0x6660a442,
- 0xeb58c,
- 0x66a24982,
- 0x66e6f2c2,
- 0x6721dcc2,
- 0x67603dc2,
- 0x67a2d742,
- 0x67e1eb82,
- 0x68204702,
- 0x68606f42,
- 0x68a71282,
- 0x68e15ac2,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x75803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x60b6b683,
- 0x275803,
- 0x377004,
- 0x254106,
- 0x2e6a83,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x6962d183,
- 0x2343c3,
- 0x2a0fc3,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x880c8,
- 0x216582,
- 0x22d183,
- 0x238483,
- 0x2264c3,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x245dc4,
- 0x216582,
- 0x22d183,
- 0x308703,
- 0x2343c3,
- 0x247344,
- 0x211cc3,
- 0x21eb03,
- 0x201604,
- 0x202243,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x215cc3,
- 0x2e9cc5,
- 0x241403,
- 0x223ec3,
- 0x216582,
- 0x22d183,
- 0x36b683,
- 0x238483,
- 0x2264c3,
- 0x200882,
- 0x323ac3,
- 0x880c8,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x231ac6,
- 0x201604,
- 0x202243,
- 0x212444,
- 0x238483,
- 0x2264c3,
- 0x21bd03,
- 0x22d183,
- 0x2343c3,
- 0x238483,
- 0x2264c3,
- 0x22d183,
- 0x1e1c6,
- 0x2343c3,
- 0x21eb03,
- 0xd1906,
- 0x238483,
- 0x2264c3,
- 0x308a48,
- 0x30b989,
- 0x31bcc9,
- 0x326c48,
- 0x37efc8,
- 0x37efc9,
- 0x333c5,
- 0x200882,
- 0x20b285,
- 0x231b43,
- 0x6c216582,
- 0x2343c3,
- 0x21eb03,
- 0x22f647,
- 0x206003,
- 0x211003,
- 0x238483,
- 0x201f43,
- 0x210783,
- 0x2025c3,
- 0x2264c3,
- 0x3a5946,
- 0x203e42,
- 0x223ec3,
- 0x880c8,
- 0x200882,
- 0x323ac3,
- 0x216582,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x201604,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x217643,
- 0x14fa806,
+ 0x20d1c2,
+ 0x200383,
+ 0x15f048,
+ 0x204cc2,
+ 0x20d1c2,
+ 0x208a42,
+ 0x201d42,
+ 0x203cc2,
+ 0x204ac3,
+ 0x200382,
+ 0x204cc2,
+ 0x368883,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x231b83,
+ 0x208a42,
+ 0x332ec3,
+ 0x204303,
+ 0x20fbc3,
+ 0x213184,
+ 0x204ac3,
+ 0x2183c3,
+ 0x200383,
+ 0x30b544,
+ 0x24abc3,
+ 0x332ec3,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x20abc3,
+ 0x200383,
+ 0x39db07,
+ 0x2d0783,
+ 0x26e5c7,
+ 0x362a86,
+ 0x215ac3,
+ 0x2041c3,
+ 0x332ec3,
+ 0x209e43,
+ 0x2964c4,
+ 0x38b704,
+ 0x30dbc6,
+ 0x201303,
+ 0x204ac3,
+ 0x200383,
+ 0x293ac5,
+ 0x318244,
+ 0x369dc3,
+ 0x37ed83,
+ 0x2c7a87,
+ 0x2387c5,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x203782,
+ 0x3ae343,
+ 0x2c2d43,
+ 0x368883,
+ 0x5fed0783,
+ 0x209c02,
+ 0x231b83,
+ 0x202743,
+ 0x332ec3,
+ 0x2964c4,
+ 0x23a0c3,
+ 0x2dfb83,
+ 0x20fbc3,
+ 0x213184,
+ 0x6020c002,
+ 0x204ac3,
+ 0x200383,
+ 0x209103,
+ 0x229b03,
+ 0x217082,
+ 0x24abc3,
+ 0x15f048,
+ 0x332ec3,
+ 0x1a5c3,
+ 0x2957c4,
+ 0x368883,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x23a184,
+ 0x231b83,
+ 0x332ec3,
+ 0x2964c4,
+ 0x204303,
+ 0x2cee84,
+ 0x222044,
+ 0x201686,
+ 0x213184,
+ 0x204ac3,
+ 0x200383,
+ 0x21aa03,
+ 0x2a32c6,
+ 0x3ddcb,
+ 0x28b86,
+ 0x4aa0a,
+ 0x10adca,
+ 0x15f048,
+ 0x20c504,
+ 0x2d0783,
+ 0x368844,
+ 0x231b83,
+ 0x256bc4,
+ 0x332ec3,
+ 0x262fc3,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x32e84b,
+ 0x39f84a,
+ 0x3b478c,
+ 0x204cc2,
+ 0x20d1c2,
+ 0x208a42,
+ 0x2b0405,
+ 0x2964c4,
+ 0x201f02,
+ 0x20fbc3,
+ 0x222044,
+ 0x202082,
+ 0x200382,
+ 0x20c4c2,
+ 0x217082,
+ 0x168883,
+ 0xd882,
+ 0x2b2409,
+ 0x259f88,
+ 0x332d49,
+ 0x234309,
+ 0x23b18a,
+ 0x24550a,
+ 0x20a182,
+ 0x21c402,
+ 0xd1c2,
+ 0x2d0783,
+ 0x220802,
+ 0x2436c6,
+ 0x356fc2,
+ 0x20a542,
+ 0x21ad8e,
+ 0x21a94e,
+ 0x281a47,
+ 0x204a47,
+ 0x221202,
+ 0x231b83,
+ 0x332ec3,
+ 0x20b502,
+ 0x201d42,
+ 0x4143,
+ 0x24058f,
+ 0x26b142,
+ 0x362cc7,
+ 0x2fa1c7,
+ 0x39d487,
+ 0x31e28c,
+ 0x364d0c,
+ 0x202444,
+ 0x283b0a,
+ 0x21a882,
+ 0x201b02,
+ 0x2bc744,
+ 0x22b1c2,
+ 0x2c5c02,
+ 0x364f44,
+ 0x2184c2,
+ 0x205d82,
+ 0x5d83,
+ 0x2ab887,
+ 0x33d885,
+ 0x2073c2,
+ 0x240504,
+ 0x373102,
+ 0x2df088,
+ 0x204ac3,
+ 0x203808,
+ 0x203ac2,
+ 0x232d85,
+ 0x203ac6,
+ 0x200383,
+ 0x206ec2,
+ 0x2ef547,
+ 0x10582,
+ 0x350845,
+ 0x31d185,
+ 0x207c82,
+ 0x236b82,
+ 0x3a860a,
+ 0x27098a,
+ 0x212bc2,
+ 0x353f84,
+ 0x2018c2,
+ 0x3a2208,
+ 0x219682,
+ 0x2a2588,
+ 0x304987,
+ 0x304c89,
+ 0x2037c2,
+ 0x309e45,
+ 0x247e85,
+ 0x21424b,
+ 0x2ca84c,
+ 0x22c208,
+ 0x3186c8,
+ 0x2e7782,
+ 0x204642,
+ 0x204cc2,
+ 0x15f048,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x208a42,
+ 0x202082,
+ 0x200382,
+ 0x200383,
+ 0x20c4c2,
+ 0x204cc2,
+ 0x6260d1c2,
+ 0x62b32ec3,
+ 0x205d83,
+ 0x201f02,
+ 0x204ac3,
+ 0x3a8fc3,
+ 0x200383,
+ 0x2ec383,
+ 0x273d06,
+ 0x1613e83,
+ 0x15f048,
+ 0x63c85,
+ 0xae2cd,
+ 0xaafca,
+ 0x6ebc7,
+ 0x63201b82,
+ 0x63601442,
+ 0x63a00f82,
+ 0x63e02e02,
+ 0x642125c2,
+ 0x6460e542,
+ 0x13ecc7,
+ 0x64a0d1c2,
+ 0x64e0e482,
+ 0x6520fe42,
+ 0x65603b02,
+ 0x21a943,
+ 0x102c4,
+ 0x220a43,
+ 0x65a14002,
+ 0x65e023c2,
+ 0x51847,
+ 0x66214502,
+ 0x66600b82,
+ 0x66a00542,
+ 0x66e0a3c2,
+ 0x67202282,
+ 0x67601d42,
+ 0xbe445,
+ 0x221443,
+ 0x3b3bc4,
+ 0x67a2b1c2,
+ 0x67e42682,
+ 0x68202682,
+ 0x7e5cb,
+ 0x68600c02,
+ 0x68e513c2,
+ 0x69201f02,
+ 0x69603cc2,
+ 0x69a0bcc2,
+ 0x69e05f02,
+ 0x6a20b602,
+ 0x6a673fc2,
+ 0x6aa0c002,
+ 0x6ae04a02,
+ 0x6b202082,
+ 0x6b603702,
+ 0x6ba12982,
+ 0x6be31302,
+ 0x94fc4,
+ 0x358183,
+ 0x6c2126c2,
+ 0x6c61a582,
+ 0x6ca098c2,
+ 0x6ce00982,
+ 0x6d200382,
+ 0x6d604c82,
+ 0x78147,
+ 0x6da054c2,
+ 0x6de05502,
+ 0x6e20c4c2,
+ 0x6e609f42,
+ 0x19de4c,
+ 0x6ea22e82,
+ 0x6ee79242,
+ 0x6f200a02,
+ 0x6f606602,
+ 0x6fa019c2,
+ 0x6fe3b302,
+ 0x70206d02,
+ 0x70613882,
+ 0x70a7af82,
+ 0x70e43e02,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x75c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x68a3a0c3,
+ 0x2075c3,
+ 0x2db744,
+ 0x259e86,
+ 0x2f74c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x716d0783,
+ 0x231b83,
+ 0x329e83,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x15f048,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x204ac3,
+ 0x200383,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x24fe44,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x3303c3,
+ 0x231b83,
+ 0x251304,
+ 0x2135c3,
+ 0x332ec3,
+ 0x2964c4,
+ 0x204303,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x2202c3,
+ 0x370145,
+ 0x2b2703,
+ 0x24abc3,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x23a0c3,
+ 0x204ac3,
+ 0x200383,
+ 0x204cc2,
+ 0x368883,
+ 0x15f048,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x22e886,
+ 0x2964c4,
+ 0x204303,
+ 0x213184,
+ 0x204ac3,
+ 0x200383,
+ 0x21aa03,
+ 0x2d0783,
+ 0x231b83,
+ 0x204ac3,
+ 0x200383,
+ 0x2d0783,
+ 0x28b86,
+ 0x231b83,
+ 0x332ec3,
+ 0xe1946,
+ 0x204ac3,
+ 0x200383,
+ 0x315cc8,
+ 0x318509,
+ 0x327a09,
+ 0x332548,
+ 0x37d888,
+ 0x37d889,
+ 0x9da85,
+ 0x204cc2,
+ 0x238605,
+ 0x205d43,
+ 0x7420d1c2,
+ 0x231b83,
+ 0x332ec3,
+ 0x33e387,
+ 0x265383,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x2104c3,
+ 0x212483,
+ 0x20abc3,
+ 0x200383,
+ 0x241f46,
+ 0x205bc2,
+ 0x24abc3,
+ 0x15f048,
+ 0x204cc2,
+ 0x368883,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x2964c4,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x213e83,
+ 0x153ca46,
}
// children is the list of nodes' children, the parent's wildcard bit and the
@@ -8636,439 +8623,471 @@ var children = [...]uint32{
0x40000000,
0x50000000,
0x60000000,
- 0x185c611,
- 0x1860617,
- 0x1880618,
- 0x19dc620,
- 0x19f0677,
- 0x1a0467c,
- 0x1a14681,
- 0x1a30685,
- 0x1a3468c,
- 0x1a4c68d,
- 0x1a70693,
- 0x1a7469c,
- 0x1a8c69d,
- 0x1a906a3,
+ 0x1860612,
+ 0x1864618,
+ 0x1884619,
+ 0x19e0621,
+ 0x19f4678,
+ 0x1a0867d,
+ 0x1a18682,
+ 0x1a34686,
+ 0x1a3868d,
+ 0x1a5068e,
+ 0x1a74694,
+ 0x1a7869d,
+ 0x1a9069e,
0x1a946a4,
- 0x1ab86a5,
- 0x1abc6ae,
- 0x21ac46af,
- 0x1b0c6b1,
- 0x1b106c3,
- 0x1b306c4,
- 0x1b446cc,
- 0x1b486d1,
- 0x1b786d2,
- 0x1b946de,
- 0x1bbc6e5,
- 0x1bc86ef,
- 0x1bcc6f2,
- 0x1c606f3,
- 0x1c74718,
- 0x1c8871d,
- 0x1cb8722,
- 0x1cc872e,
- 0x1cdc732,
- 0x1d00737,
- 0x1e18740,
- 0x1e1c786,
- 0x1e88787,
- 0x1e9c7a2,
- 0x1eb07a7,
- 0x1eb87ac,
- 0x1ec87ae,
- 0x1ecc7b2,
- 0x1ee47b3,
- 0x1f2c7b9,
- 0x1f447cb,
- 0x1f487d1,
- 0x1f4c7d2,
- 0x1f547d3,
- 0x1f907d5,
- 0x61f947e4,
- 0x1fa87e5,
- 0x1fac7ea,
- 0x1fb07eb,
- 0x1fc07ec,
- 0x20707f0,
- 0x207481c,
- 0x2207c81d,
- 0x2208081f,
+ 0x1a986a5,
+ 0x1ac06a6,
+ 0x1ac46b0,
+ 0x21acc6b1,
+ 0x1b146b3,
+ 0x1b186c5,
+ 0x1b386c6,
+ 0x1b4c6ce,
+ 0x1b506d3,
+ 0x1b806d4,
+ 0x1b9c6e0,
+ 0x1bc46e7,
+ 0x1bd06f1,
+ 0x1bd46f4,
+ 0x1c686f5,
+ 0x1c7c71a,
+ 0x1c9071f,
+ 0x1cc0724,
+ 0x1cd0730,
+ 0x1ce4734,
+ 0x1d08739,
+ 0x1e20742,
+ 0x1e24788,
+ 0x1e90789,
+ 0x1ea47a4,
+ 0x1eb87a9,
+ 0x1ec07ae,
+ 0x1ed07b0,
+ 0x1ed47b4,
+ 0x1eec7b5,
+ 0x1f347bb,
+ 0x1f4c7cd,
+ 0x1f507d3,
+ 0x1f547d4,
+ 0x1f5c7d5,
+ 0x1f987d7,
+ 0x61f9c7e6,
+ 0x1fb07e7,
+ 0x1fbc7ec,
+ 0x1fc07ef,
+ 0x1fd07f0,
+ 0x20807f4,
0x2084820,
- 0x20b8821,
- 0x20bc82e,
- 0x24f482f,
- 0x2254493d,
- 0x22548951,
- 0x2570952,
- 0x257895c,
- 0x2257c95e,
- 0x258495f,
- 0x22594961,
- 0x22598965,
- 0x25a4966,
- 0x225a8969,
- 0x25ac96a,
+ 0x22090821,
+ 0x22098824,
+ 0x20cc826,
+ 0x20d0833,
+ 0x2514834,
+ 0x225ac945,
0x225b096b,
- 0x25cc96c,
- 0x25e4973,
- 0x25e8979,
- 0x25f897a,
- 0x260097e,
- 0x22634980,
- 0x263898d,
- 0x264898e,
- 0x267c992,
+ 0x225b496c,
+ 0x225c096d,
+ 0x225c4970,
+ 0x225d0971,
+ 0x225d4974,
+ 0x225d8975,
+ 0x225dc976,
+ 0x225e0977,
+ 0x225e4978,
+ 0x225f0979,
+ 0x225f497c,
+ 0x2260097d,
+ 0x22604980,
+ 0x22608981,
+ 0x2260c982,
+ 0x22610983,
+ 0x22614984,
+ 0x2618985,
+ 0x2261c986,
+ 0x22628987,
+ 0x2262c98a,
+ 0x263498b,
+ 0x2264498d,
+ 0x22648991,
+ 0x2654992,
+ 0x22658995,
+ 0x265c996,
+ 0x22660997,
+ 0x267c998,
0x269499f,
- 0x26a89a5,
- 0x26d09aa,
- 0x26f09b4,
- 0x27209bc,
- 0x27489c8,
- 0x274c9d2,
- 0x27709d3,
- 0x27749dc,
- 0x27889dd,
- 0x278c9e2,
- 0x27909e3,
- 0x27b09e4,
- 0x27c09ec,
- 0x27d09f0,
- 0x27d49f4,
- 0x28489f5,
- 0x2864a12,
- 0x2870a19,
- 0x2884a1c,
- 0x289ca21,
- 0x28b0a27,
- 0x28c8a2c,
- 0x28e0a32,
- 0x28f8a38,
- 0x2914a3e,
- 0x292ca45,
- 0x298ca4b,
- 0x29a4a63,
- 0x29a8a69,
- 0x29bca6a,
- 0x2a00a6f,
- 0x2a80a80,
- 0x2aacaa0,
- 0x2ab0aab,
- 0x2ab8aac,
- 0x2ad8aae,
- 0x2adcab6,
- 0x2afcab7,
- 0x2b04abf,
- 0x2b3cac1,
- 0x2b78acf,
- 0x2b7cade,
- 0x2bbcadf,
- 0x2bd4aef,
- 0x2bf8af5,
- 0x2c18afe,
- 0x31dcb06,
- 0x31e8c77,
- 0x3208c7a,
- 0x33c4c82,
- 0x3494cf1,
- 0x3504d25,
- 0x355cd41,
- 0x3644d57,
- 0x369cd91,
- 0x36d8da7,
- 0x37d4db6,
- 0x38a0df5,
- 0x3938e28,
- 0x39c8e4e,
- 0x3a2ce72,
- 0x3c64e8b,
- 0x3d1cf19,
- 0x3de8f47,
- 0x3e34f7a,
- 0x3ebcf8d,
- 0x3ef8faf,
- 0x3f48fbe,
- 0x3fc0fd2,
- 0x63fc4ff0,
- 0x63fc8ff1,
- 0x63fccff2,
- 0x4048ff3,
- 0x40ad012,
- 0x412902b,
- 0x41a104a,
- 0x4221068,
- 0x428d088,
- 0x43b90a3,
- 0x44110ee,
- 0x64415104,
- 0x44ad105,
- 0x453512b,
- 0x458114d,
- 0x45e9160,
- 0x469117a,
- 0x47591a4,
- 0x47c11d6,
- 0x48d51f0,
- 0x648d9235,
- 0x648dd236,
- 0x4939237,
- 0x499524e,
- 0x4a25265,
- 0x4aa1289,
- 0x4ae52a8,
- 0x4bc92b9,
- 0x4bfd2f2,
- 0x4c5d2ff,
- 0x4cd1317,
- 0x4d59334,
- 0x4d99356,
- 0x4e09366,
- 0x64e0d382,
- 0x64e11383,
- 0x24e15384,
- 0x4e2d385,
- 0x4e4938b,
- 0x4e8d392,
- 0x4e9d3a3,
- 0x4eb53a7,
- 0x4f2d3ad,
- 0x4f353cb,
- 0x4f493cd,
- 0x4f613d2,
- 0x4f893d8,
- 0x4f8d3e2,
- 0x4f953e3,
- 0x4fa93e5,
- 0x4fc53ea,
- 0x4fc93f1,
- 0x4fd13f2,
- 0x500d3f4,
- 0x5021403,
- 0x5029408,
- 0x503140a,
- 0x503540c,
- 0x505940d,
- 0x507d416,
- 0x509541f,
- 0x5099425,
- 0x50a1426,
- 0x50a5428,
- 0x50f9429,
- 0x511d43e,
- 0x513d447,
- 0x515944f,
- 0x5169456,
- 0x517d45a,
- 0x518145f,
- 0x5189460,
- 0x519d462,
- 0x51ad467,
- 0x51b146b,
- 0x51cd46c,
- 0x5a5d473,
- 0x5a95697,
- 0x5ac16a5,
- 0x5ad96b0,
- 0x5af96b6,
- 0x5b196be,
- 0x5b5d6c6,
- 0x5b656d7,
- 0x25b696d9,
- 0x25b6d6da,
- 0x5b716db,
- 0x5c956dc,
- 0x25c99725,
- 0x25ca1726,
- 0x25ca9728,
- 0x25cb572a,
- 0x5cb972d,
- 0x5ce172e,
- 0x5d09738,
- 0x5d0d742,
- 0x25d45743,
- 0x5d59751,
- 0x68b1756,
- 0x68b5a2c,
- 0x68b9a2d,
- 0x268bda2e,
- 0x68c1a2f,
- 0x268c5a30,
- 0x68c9a31,
- 0x268d5a32,
- 0x68d9a35,
- 0x68dda36,
- 0x268e1a37,
- 0x68e5a38,
- 0x268eda39,
- 0x68f1a3b,
- 0x68f5a3c,
- 0x26905a3d,
- 0x6909a41,
- 0x690da42,
- 0x6911a43,
- 0x6915a44,
- 0x26919a45,
- 0x691da46,
- 0x6921a47,
- 0x6925a48,
- 0x6929a49,
- 0x26931a4a,
- 0x6935a4c,
- 0x6939a4d,
- 0x693da4e,
- 0x26941a4f,
- 0x6945a50,
- 0x2694da51,
- 0x26951a53,
- 0x696da54,
- 0x6979a5b,
- 0x69b9a5e,
- 0x69bda6e,
- 0x69e1a6f,
- 0x6b31a78,
- 0x26b39acc,
- 0x26b3dace,
- 0x26b41acf,
- 0x6b49ad0,
- 0x6c25ad2,
- 0x6c29b09,
- 0x6c55b0a,
- 0x6c75b15,
- 0x6c81b1d,
- 0x6ca1b20,
- 0x6cd9b28,
- 0x6f71b36,
- 0x702dbdc,
- 0x7041c0b,
- 0x7075c10,
- 0x70a5c1d,
- 0x70c1c29,
- 0x70e5c30,
- 0x7101c39,
- 0x711dc40,
- 0x7141c47,
- 0x7151c50,
- 0x7185c54,
- 0x71a1c61,
- 0x73adc68,
- 0x73d1ceb,
- 0x73f1cf4,
- 0x7405cfc,
- 0x7419d01,
- 0x7439d06,
- 0x74ddd0e,
- 0x74f9d37,
- 0x7515d3e,
+ 0x26989a5,
+ 0x26a89a6,
+ 0x26b09aa,
+ 0x26e49ac,
+ 0x26e89b9,
+ 0x26f89ba,
+ 0x27909be,
+ 0x227949e4,
+ 0x279c9e5,
+ 0x27a09e7,
+ 0x27b89e8,
+ 0x27cc9ee,
+ 0x27f49f3,
+ 0x28149fd,
+ 0x2844a05,
+ 0x286ca11,
+ 0x2870a1b,
+ 0x2894a1c,
+ 0x2898a25,
+ 0x28aca26,
+ 0x28b0a2b,
+ 0x28b4a2c,
+ 0x28d4a2d,
+ 0x28eca35,
+ 0x28f0a3b,
+ 0x228f4a3c,
+ 0x28f8a3d,
+ 0x2908a3e,
+ 0x290ca42,
+ 0x2984a43,
+ 0x29a0a61,
+ 0x29aca68,
+ 0x29c0a6b,
+ 0x29d8a70,
+ 0x29eca76,
+ 0x2a04a7b,
+ 0x2a1ca81,
+ 0x2a34a87,
+ 0x2a50a8d,
+ 0x2a68a94,
+ 0x2ac8a9a,
+ 0x2ae0ab2,
+ 0x2ae4ab8,
+ 0x2af8ab9,
+ 0x2b3cabe,
+ 0x2bbcacf,
+ 0x2be8aef,
+ 0x2becafa,
+ 0x2bf4afb,
+ 0x2c14afd,
+ 0x2c18b05,
+ 0x2c38b06,
+ 0x2c40b0e,
+ 0x2c78b10,
+ 0x2cb8b1e,
+ 0x2cbcb2e,
+ 0x2d0cb2f,
+ 0x2d10b43,
+ 0x22d14b44,
+ 0x2d2cb45,
+ 0x2d50b4b,
+ 0x2d70b54,
+ 0x3334b5c,
+ 0x3340ccd,
+ 0x3360cd0,
+ 0x351ccd8,
+ 0x35ecd47,
+ 0x365cd7b,
+ 0x36b4d97,
+ 0x379cdad,
+ 0x37f4de7,
+ 0x3830dfd,
+ 0x392ce0c,
+ 0x39f8e4b,
+ 0x3a90e7e,
+ 0x3b20ea4,
+ 0x3b84ec8,
+ 0x3dbcee1,
+ 0x3e74f6f,
+ 0x3f40f9d,
+ 0x3f8cfd0,
+ 0x4014fe3,
+ 0x4051005,
+ 0x40a1014,
+ 0x4119028,
+ 0x6411d046,
+ 0x64121047,
+ 0x64125048,
+ 0x41a1049,
+ 0x41fd068,
+ 0x427907f,
+ 0x42f109e,
+ 0x43710bc,
+ 0x43dd0dc,
+ 0x45090f7,
+ 0x4561142,
+ 0x64565158,
+ 0x45fd159,
+ 0x468517f,
+ 0x46d11a1,
+ 0x47391b4,
+ 0x47e11ce,
+ 0x48a91f8,
+ 0x491122a,
+ 0x4a25244,
+ 0x64a29289,
+ 0x64a2d28a,
+ 0x4a8928b,
+ 0x4ae52a2,
+ 0x4b752b9,
+ 0x4bf12dd,
+ 0x4c352fc,
+ 0x4d1930d,
+ 0x4d4d346,
+ 0x4dad353,
+ 0x4e2136b,
+ 0x4ea9388,
+ 0x4ee93aa,
+ 0x4f593ba,
+ 0x64f5d3d6,
+ 0x64f613d7,
+ 0x24f653d8,
+ 0x4f7d3d9,
+ 0x4f993df,
+ 0x4fdd3e6,
+ 0x4fed3f7,
+ 0x50053fb,
+ 0x507d401,
+ 0x508541f,
+ 0x5099421,
+ 0x50b1426,
+ 0x50d942c,
+ 0x50dd436,
+ 0x50e5437,
+ 0x50f9439,
+ 0x511543e,
+ 0x5119445,
+ 0x5121446,
+ 0x515d448,
+ 0x5171457,
+ 0x517945c,
+ 0x518145e,
+ 0x5185460,
+ 0x51a9461,
+ 0x51cd46a,
+ 0x51e5473,
+ 0x51e9479,
+ 0x51f147a,
+ 0x51f547c,
+ 0x524d47d,
+ 0x5271493,
+ 0x529149c,
+ 0x52ad4a4,
+ 0x52bd4ab,
+ 0x52d14af,
+ 0x52d54b4,
+ 0x52dd4b5,
+ 0x52f14b7,
+ 0x53014bc,
+ 0x53054c0,
+ 0x53214c1,
+ 0x5bb14c8,
+ 0x5be96ec,
+ 0x5c156fa,
+ 0x5c2d705,
+ 0x5c4d70b,
+ 0x5c6d713,
+ 0x5cb171b,
+ 0x5cb972c,
+ 0x25cbd72e,
+ 0x25cc172f,
+ 0x5cc5730,
+ 0x5e01731,
+ 0x25e05780,
+ 0x25e11781,
+ 0x25e19784,
+ 0x25e25786,
+ 0x5e29789,
+ 0x5e2d78a,
+ 0x5e5578b,
+ 0x5e7d795,
+ 0x5e8179f,
+ 0x5eb97a0,
+ 0x5ecd7ae,
+ 0x6a257b3,
+ 0x6a29a89,
+ 0x6a2da8a,
+ 0x26a31a8b,
+ 0x6a35a8c,
+ 0x26a39a8d,
+ 0x6a3da8e,
+ 0x26a49a8f,
+ 0x6a4da92,
+ 0x6a51a93,
+ 0x26a55a94,
+ 0x6a59a95,
+ 0x26a61a96,
+ 0x6a65a98,
+ 0x6a69a99,
+ 0x26a79a9a,
+ 0x6a7da9e,
+ 0x6a81a9f,
+ 0x6a85aa0,
+ 0x6a89aa1,
+ 0x26a8daa2,
+ 0x6a91aa3,
+ 0x6a95aa4,
+ 0x6a99aa5,
+ 0x6a9daa6,
+ 0x26aa5aa7,
+ 0x6aa9aa9,
+ 0x6aadaaa,
+ 0x6ab1aab,
+ 0x26ab5aac,
+ 0x6ab9aad,
+ 0x26ac1aae,
+ 0x26ac5ab0,
+ 0x6ae1ab1,
+ 0x6aedab8,
+ 0x6b2dabb,
+ 0x6b31acb,
+ 0x6b55acc,
+ 0x6b59ad5,
+ 0x6cc1ad6,
+ 0x26cc5b30,
+ 0x26ccdb31,
+ 0x26cd1b33,
+ 0x26cd5b34,
+ 0x6cddb35,
+ 0x6db9b37,
+ 0x6dbdb6e,
+ 0x6de9b6f,
+ 0x6dedb7a,
+ 0x6e0db7b,
+ 0x6e19b83,
+ 0x6e39b86,
+ 0x6e71b8e,
+ 0x7109b9c,
+ 0x71c5c42,
+ 0x71d9c71,
+ 0x720dc76,
+ 0x723dc83,
+ 0x7259c8f,
+ 0x727dc96,
+ 0x7299c9f,
+ 0x72b5ca6,
+ 0x72d9cad,
+ 0x72e9cb6,
+ 0x72edcba,
+ 0x7321cbb,
+ 0x733dcc8,
+ 0x7359ccf,
+ 0x737dcd6,
+ 0x739dcdf,
+ 0x73b1ce7,
+ 0x73c5cec,
+ 0x73c9cf1,
+ 0x73e9cf2,
+ 0x748dcfa,
+ 0x74a9d23,
+ 0x74c9d2a,
+ 0x74cdd32,
+ 0x74d1d33,
+ 0x74d5d34,
+ 0x74e9d35,
+ 0x7509d3a,
+ 0x7515d42,
0x7519d45,
- 0x751dd46,
- 0x7521d47,
- 0x7535d48,
- 0x7555d4d,
- 0x7561d55,
- 0x7565d58,
- 0x7595d59,
- 0x7615d65,
- 0x7629d85,
- 0x762dd8a,
- 0x7645d8b,
- 0x7649d91,
- 0x7655d92,
- 0x7659d95,
- 0x7675d96,
- 0x76b1d9d,
- 0x76b5dac,
- 0x76d5dad,
- 0x7725db5,
- 0x773ddc9,
- 0x7791dcf,
- 0x7795de4,
- 0x7799de5,
- 0x77ddde6,
- 0x77eddf7,
- 0x7825dfb,
- 0x7855e09,
- 0x7991e15,
- 0x79b5e64,
- 0x79e1e6d,
- 0x79ede78,
- 0x79f1e7b,
- 0x7b01e7c,
- 0x7b0dec0,
- 0x7b19ec3,
- 0x7b25ec6,
- 0x7b31ec9,
- 0x7b3decc,
- 0x7b49ecf,
- 0x7b55ed2,
- 0x7b61ed5,
- 0x7b6ded8,
+ 0x7549d46,
+ 0x75c9d52,
+ 0x75ddd72,
+ 0x75e1d77,
+ 0x75f9d78,
+ 0x75fdd7e,
+ 0x7609d7f,
+ 0x760dd82,
+ 0x7629d83,
+ 0x7665d8a,
+ 0x7669d99,
+ 0x7689d9a,
+ 0x76d9da2,
+ 0x76f1db6,
+ 0x7745dbc,
+ 0x7749dd1,
+ 0x774ddd2,
+ 0x7751dd3,
+ 0x7795dd4,
+ 0x77a5de5,
+ 0x77ddde9,
+ 0x780ddf7,
+ 0x7955e03,
+ 0x7979e55,
+ 0x79a5e5e,
+ 0x79b1e69,
+ 0x79b9e6c,
+ 0x7ac9e6e,
+ 0x7ad5eb2,
+ 0x7ae1eb5,
+ 0x7aedeb8,
+ 0x7af9ebb,
+ 0x7b05ebe,
+ 0x7b11ec1,
+ 0x7b1dec4,
+ 0x7b29ec7,
+ 0x7b35eca,
+ 0x7b41ecd,
+ 0x7b4ded0,
+ 0x7b59ed3,
+ 0x7b65ed6,
+ 0x7b6ded9,
0x7b79edb,
0x7b85ede,
0x7b91ee1,
0x7b9dee4,
- 0x7ba5ee7,
- 0x7bb1ee9,
- 0x7bbdeec,
- 0x7bc9eef,
- 0x7bd5ef2,
- 0x7be1ef5,
- 0x7bedef8,
- 0x7bf9efb,
- 0x7c05efe,
- 0x7c11f01,
- 0x7c1df04,
- 0x7c29f07,
- 0x7c35f0a,
- 0x7c41f0d,
+ 0x7ba9ee7,
+ 0x7bb5eea,
+ 0x7bc1eed,
+ 0x7bcdef0,
+ 0x7bd9ef3,
+ 0x7be5ef6,
+ 0x7bf1ef9,
+ 0x7bfdefc,
+ 0x7c09eff,
+ 0x7c15f02,
+ 0x7c21f05,
+ 0x7c2df08,
+ 0x7c39f0b,
+ 0x7c41f0e,
0x7c4df10,
0x7c59f13,
0x7c65f16,
0x7c71f19,
- 0x7c79f1c,
- 0x7c85f1e,
- 0x7c91f21,
- 0x7c9df24,
- 0x7ca9f27,
- 0x7cb5f2a,
- 0x7cc1f2d,
- 0x7ccdf30,
- 0x7cd9f33,
- 0x7ce5f36,
+ 0x7c7df1c,
+ 0x7c89f1f,
+ 0x7c95f22,
+ 0x7ca1f25,
+ 0x7cadf28,
+ 0x7cb9f2b,
+ 0x7cc5f2e,
+ 0x7cd1f31,
+ 0x7cddf34,
+ 0x7ce5f37,
0x7cf1f39,
0x7cfdf3c,
0x7d09f3f,
0x7d15f42,
- 0x7d1df45,
- 0x7d29f47,
- 0x7d35f4a,
- 0x7d41f4d,
- 0x7d4df50,
- 0x7d59f53,
- 0x7d65f56,
- 0x7d71f59,
- 0x7d7df5c,
- 0x7d81f5f,
- 0x7d8df60,
- 0x7da5f63,
- 0x7da9f69,
- 0x7db9f6a,
- 0x7dd1f6e,
- 0x7e15f74,
- 0x7e29f85,
- 0x7e5df8a,
- 0x7e6df97,
- 0x7e89f9b,
- 0x7ea1fa2,
- 0x7ea5fa8,
- 0x27ee9fa9,
- 0x7eedfba,
- 0x7f19fbb,
- 0x7f1dfc6,
+ 0x7d21f45,
+ 0x7d2df48,
+ 0x7d39f4b,
+ 0x7d45f4e,
+ 0x7d49f51,
+ 0x7d55f52,
+ 0x7d6df55,
+ 0x7d71f5b,
+ 0x7d81f5c,
+ 0x7d99f60,
+ 0x7dddf66,
+ 0x7df1f77,
+ 0x7e25f7c,
+ 0x7e35f89,
+ 0x7e51f8d,
+ 0x7e69f94,
+ 0x7e6df9a,
+ 0x27eb1f9b,
+ 0x7eb5fac,
+ 0x7ee1fad,
+ 0x7ee5fb8,
}
-// max children 434 (capacity 511)
-// max text offset 27930 (capacity 32767)
+// max children 466 (capacity 511)
+// max text offset 28023 (capacity 32767)
// max text length 36 (capacity 63)
-// max hi 8135 (capacity 16383)
-// max lo 8134 (capacity 16383)
+// max hi 8121 (capacity 16383)
+// max lo 8120 (capacity 16383)
diff --git a/vendor/golang.org/x/net/publicsuffix/table_test.go b/vendor/golang.org/x/net/publicsuffix/table_test.go
index 5433f3b17..f60c80e79 100644
--- a/vendor/golang.org/x/net/publicsuffix/table_test.go
+++ b/vendor/golang.org/x/net/publicsuffix/table_test.go
@@ -541,6 +541,7 @@ var rules = [...]string{
"org.cw",
"cx",
"gov.cx",
+ "cy",
"ac.cy",
"biz.cy",
"com.cy",
@@ -2207,9 +2208,7 @@ var rules = [...]string{
"aso.kumamoto.jp",
"choyo.kumamoto.jp",
"gyokuto.kumamoto.jp",
- "hitoyoshi.kumamoto.jp",
"kamiamakusa.kumamoto.jp",
- "kashima.kumamoto.jp",
"kikuchi.kumamoto.jp",
"kumamoto.kumamoto.jp",
"mashiki.kumamoto.jp",
@@ -3968,20 +3967,21 @@ var rules = [...]string{
"net.ng",
"org.ng",
"sch.ng",
+ "ni",
+ "ac.ni",
+ "biz.ni",
+ "co.ni",
"com.ni",
- "gob.ni",
"edu.ni",
- "org.ni",
- "nom.ni",
- "net.ni",
- "mil.ni",
- "co.ni",
- "biz.ni",
- "web.ni",
- "int.ni",
- "ac.ni",
+ "gob.ni",
"in.ni",
"info.ni",
+ "int.ni",
+ "mil.ni",
+ "net.ni",
+ "nom.ni",
+ "org.ni",
+ "web.ni",
"nl",
"bv.nl",
"no",
@@ -4775,6 +4775,7 @@ var rules = [...]string{
"net.om",
"org.om",
"pro.om",
+ "onion",
"org",
"pa",
"ac.pa",
@@ -5126,133 +5127,9 @@ var rules = [...]string{
"org.rs",
"ru",
"ac.ru",
- "com.ru",
"edu.ru",
- "int.ru",
- "net.ru",
- "org.ru",
- "pp.ru",
- "adygeya.ru",
- "altai.ru",
- "amur.ru",
- "arkhangelsk.ru",
- "astrakhan.ru",
- "bashkiria.ru",
- "belgorod.ru",
- "bir.ru",
- "bryansk.ru",
- "buryatia.ru",
- "cbg.ru",
- "chel.ru",
- "chelyabinsk.ru",
- "chita.ru",
- "chukotka.ru",
- "chuvashia.ru",
- "dagestan.ru",
- "dudinka.ru",
- "e-burg.ru",
- "grozny.ru",
- "irkutsk.ru",
- "ivanovo.ru",
- "izhevsk.ru",
- "jar.ru",
- "joshkar-ola.ru",
- "kalmykia.ru",
- "kaluga.ru",
- "kamchatka.ru",
- "karelia.ru",
- "kazan.ru",
- "kchr.ru",
- "kemerovo.ru",
- "khabarovsk.ru",
- "khakassia.ru",
- "khv.ru",
- "kirov.ru",
- "koenig.ru",
- "komi.ru",
- "kostroma.ru",
- "krasnoyarsk.ru",
- "kuban.ru",
- "kurgan.ru",
- "kursk.ru",
- "lipetsk.ru",
- "magadan.ru",
- "mari.ru",
- "mari-el.ru",
- "marine.ru",
- "mordovia.ru",
- "msk.ru",
- "murmansk.ru",
- "nalchik.ru",
- "nnov.ru",
- "nov.ru",
- "novosibirsk.ru",
- "nsk.ru",
- "omsk.ru",
- "orenburg.ru",
- "oryol.ru",
- "palana.ru",
- "penza.ru",
- "perm.ru",
- "ptz.ru",
- "rnd.ru",
- "ryazan.ru",
- "sakhalin.ru",
- "samara.ru",
- "saratov.ru",
- "simbirsk.ru",
- "smolensk.ru",
- "spb.ru",
- "stavropol.ru",
- "stv.ru",
- "surgut.ru",
- "tambov.ru",
- "tatarstan.ru",
- "tom.ru",
- "tomsk.ru",
- "tsaritsyn.ru",
- "tsk.ru",
- "tula.ru",
- "tuva.ru",
- "tver.ru",
- "tyumen.ru",
- "udm.ru",
- "udmurtia.ru",
- "ulan-ude.ru",
- "vladikavkaz.ru",
- "vladimir.ru",
- "vladivostok.ru",
- "volgograd.ru",
- "vologda.ru",
- "voronezh.ru",
- "vrn.ru",
- "vyatka.ru",
- "yakutia.ru",
- "yamal.ru",
- "yaroslavl.ru",
- "yekaterinburg.ru",
- "yuzhno-sakhalinsk.ru",
- "amursk.ru",
- "baikal.ru",
- "cmw.ru",
- "fareast.ru",
- "jamal.ru",
- "kms.ru",
- "k-uralsk.ru",
- "kustanai.ru",
- "kuzbass.ru",
- "mytis.ru",
- "nakhodka.ru",
- "nkz.ru",
- "norilsk.ru",
- "oskol.ru",
- "pyatigorsk.ru",
- "rubtsovsk.ru",
- "snz.ru",
- "syzran.ru",
- "vdonsk.ru",
- "zgrad.ru",
"gov.ru",
+ "int.ru",
"mil.ru",
"test.ru",
"rw",
@@ -6379,7 +6256,6 @@ var rules = [...]string{
"education",
"email",
"emerck",
- "emerson",
"energy",
"engineer",
"engineering",
@@ -6542,6 +6418,7 @@ var rules = [...]string{
"honda",
"honeywell",
"horse",
+ "hospital",
"host",
"hosting",
"hot",
@@ -7293,43 +7170,64 @@ var rules = [...]string{
"*.alces.network",
"*.alwaysdata.net",
"cloudfront.net",
- "compute.amazonaws.com",
- "ap-northeast-1.compute.amazonaws.com",
- "ap-northeast-2.compute.amazonaws.com",
- "ap-southeast-1.compute.amazonaws.com",
- "ap-southeast-2.compute.amazonaws.com",
- "eu-central-1.compute.amazonaws.com",
- "eu-west-1.compute.amazonaws.com",
- "sa-east-1.compute.amazonaws.com",
- "us-gov-west-1.compute.amazonaws.com",
- "us-west-1.compute.amazonaws.com",
- "us-west-2.compute.amazonaws.com",
- "compute-1.amazonaws.com",
- "z-1.compute-1.amazonaws.com",
- "z-2.compute-1.amazonaws.com",
+ "*.compute.amazonaws.com",
+ "*.compute-1.amazonaws.com",
+ "*.compute.amazonaws.com.cn",
"us-east-1.amazonaws.com",
- "compute.amazonaws.com.cn",
- "cn-north-1.compute.amazonaws.com.cn",
- "elasticbeanstalk.com",
- "elb.amazonaws.com",
- "s3.amazonaws.com",
+ "elasticbeanstalk.cn-north-1.amazonaws.com.cn",
+ "*.elasticbeanstalk.com",
+ "*.elb.amazonaws.com",
+ "*.elb.amazonaws.com.cn",
+ "*.s3.amazonaws.com",
"s3-ap-northeast-1.amazonaws.com",
"s3-ap-northeast-2.amazonaws.com",
+ "s3-ap-south-1.amazonaws.com",
"s3-ap-southeast-1.amazonaws.com",
"s3-ap-southeast-2.amazonaws.com",
+ "s3-ca-central-1.amazonaws.com",
"s3-eu-central-1.amazonaws.com",
"s3-eu-west-1.amazonaws.com",
"s3-external-1.amazonaws.com",
- "s3-external-2.amazonaws.com",
"s3-fips-us-gov-west-1.amazonaws.com",
"s3-sa-east-1.amazonaws.com",
"s3-us-gov-west-1.amazonaws.com",
+ "s3-us-east-2.amazonaws.com",
"s3-us-west-1.amazonaws.com",
"s3-us-west-2.amazonaws.com",
"s3.ap-northeast-2.amazonaws.com",
+ "s3.ap-south-1.amazonaws.com",
"s3.cn-north-1.amazonaws.com.cn",
+ "s3.ca-central-1.amazonaws.com",
"s3.eu-central-1.amazonaws.com",
+ "s3.us-east-2.amazonaws.com",
+ "s3.dualstack.ap-northeast-1.amazonaws.com",
+ "s3.dualstack.ap-northeast-2.amazonaws.com",
+ "s3.dualstack.ap-south-1.amazonaws.com",
+ "s3.dualstack.ap-southeast-1.amazonaws.com",
+ "s3.dualstack.ap-southeast-2.amazonaws.com",
+ "s3.dualstack.ca-central-1.amazonaws.com",
+ "s3.dualstack.eu-central-1.amazonaws.com",
+ "s3.dualstack.eu-west-1.amazonaws.com",
+ "s3.dualstack.sa-east-1.amazonaws.com",
+ "s3.dualstack.us-east-1.amazonaws.com",
+ "s3.dualstack.us-east-2.amazonaws.com",
+ "s3-website-us-east-1.amazonaws.com",
+ "s3-website-us-west-1.amazonaws.com",
+ "s3-website-us-west-2.amazonaws.com",
+ "s3-website-ap-northeast-1.amazonaws.com",
+ "s3-website-ap-southeast-1.amazonaws.com",
+ "s3-website-ap-southeast-2.amazonaws.com",
+ "s3-website-eu-west-1.amazonaws.com",
+ "s3-website-sa-east-1.amazonaws.com",
+ "s3-website.ap-northeast-2.amazonaws.com",
+ "s3-website.ap-south-1.amazonaws.com",
+ "s3-website.ca-central-1.amazonaws.com",
+ "s3-website.eu-central-1.amazonaws.com",
+ "s3-website.us-east-2.amazonaws.com",
+ "t3l3p0rt.net",
+ "tele.amune.org",
"on-aptible.com",
+ "user.party.eus",
"pimienta.org",
"poivron.org",
"potager.org",
@@ -7402,6 +7300,15 @@ var rules = [...]string{
"co.nl",
"co.no",
"*.platform.sh",
+ "dyn.cosidns.de",
+ "dynamisches-dns.de",
+ "dnsupdater.de",
+ "internet-dns.de",
+ "l-o-g-i-n.de",
+ "dynamic-dns.info",
+ "feste-ip.net",
+ "knx-server.net",
+ "static-access.net",
"realm.cz",
"*.cryptonomic.net",
"cupcake.is",
@@ -7701,8 +7608,19 @@ var rules = [...]string{
"webhop.org",
"worse-than.tv",
"writesthisblog.com",
+ "ddnss.de",
+ "dyn.ddnss.de",
+ "dyndns.ddnss.de",
+ "dyndns1.de",
+ "dyn-ip24.de",
+ "home-webserver.de",
+ "dyn.home-webserver.de",
+ "myhome-server.de",
+ "ddnss.org",
"dynv6.net",
"e4.cz",
+ "enonic.io",
+ "customer.enonic.io",
"eu.org",
"al.eu.org",
"asso.eu.org",
@@ -7764,11 +7682,14 @@ var rules = [...]string{
"us-1.evennode.com",
"us-2.evennode.com",
"apps.fbsbx.com",
+ "map.fastly.net",
+ "a.prod.fastly.net",
+ "global.prod.fastly.net",
"a.ssl.fastly.net",
"b.ssl.fastly.net",
"global.ssl.fastly.net",
- "a.prod.fastly.net",
- "global.prod.fastly.net",
+ "fastlylb.net",
+ "map.fastlylb.net",
"fhapp.xyz",
"firebaseapp.com",
"flynnhub.com",
@@ -7778,9 +7699,12 @@ var rules = [...]string{
"fbxos.fr",
"freebox-os.fr",
"freeboxos.fr",
+ "myfusion.cloud",
+ "futurehosting.at",
"futuremailing.at",
"*.ex.ortsinfo.at",
"*.kunden.ortsinfo.at",
+ "*.statics.cloud",
"service.gov.uk",
"github.io",
"githubusercontent.com",
@@ -7790,7 +7714,7 @@ var rules = [...]string{
"gist.githubcloud.com",
"*.githubcloudusercontent.com",
"gitlab.io",
- "ro.com",
+ "homeoffice.gov.uk",
"ro.im",
"shop.ro",
"goip.de",
@@ -8036,6 +7960,7 @@ var rules = [...]string{
"pantheonsite.io",
"gotpantheon.com",
"mypep.link",
+ "on-web.fr",
"xen.prgmr.com",
"priv.at",
"protonet.io",
@@ -8054,19 +7979,34 @@ var rules = [...]string{
"sandcats.io",
"logoip.de",
"logoip.com",
+ "firewall-gateway.com",
+ "firewall-gateway.de",
+ "my-gateway.de",
+ "my-router.de",
+ "spdns.de",
+ "spdns.eu",
+ "firewall-gateway.net",
+ "my-firewall.org",
+ "myfirewall.org",
+ "spdns.org",
"biz.ua",
"co.ua",
"pp.ua",
+ "shiftedit.io",
"myshopblocks.com",
+ "1kapp.com",
+ "appchizi.com",
+ "applinzi.com",
"sinaapp.com",
"vipsinaapp.com",
- "1kapp.com",
"bounty-full.com",
"alpha.bounty-full.com",
"beta.bounty-full.com",
"static.land",
"dev.static.land",
"sites.static.land",
+ "apps.lair.io",
+ "*.stolos.io",
"spacekit.io",
"stackspace.space",
"diskstation.me",
@@ -8094,16 +8034,41 @@ var rules = [...]string{
"*.transurl.eu",
"*.transurl.nl",
"tuxfamily.org",
+ "dd-dns.de",
+ "diskstation.eu",
+ "diskstation.org",
+ "dray-dns.de",
+ "draydns.de",
+ "dyn-vpn.de",
+ "dynvpn.de",
+ "mein-vigor.de",
+ "my-vigor.de",
+ "my-wan.de",
+ "syno-ds.de",
+ "synology-diskstation.de",
+ "synology-ds.de",
"hk.com",
"hk.org",
"ltd.hk",
"inc.hk",
"lib.de.us",
"router.management",
+ "remotewd.com",
"wmflabs.org",
"yolasite.com",
+ "ybo.faith",
+ "yombo.me",
+ "homelink.one",
+ "ybo.party",
+ "ybo.review",
+ "ybo.science",
+ "ybo.trade",
"za.net",
"za.org",
+ "now.sh",
+ "cc.ua",
+ "inf.ua",
+ "ltd.ua",
}
var nodeLabels = [...]string{
@@ -8497,7 +8462,6 @@ var nodeLabels = [...]string{
"eg",
"email",
"emerck",
- "emerson",
"energy",
"engineer",
"engineering",
@@ -8693,6 +8657,7 @@ var nodeLabels = [...]string{
"honda",
"honeywell",
"horse",
+ "hospital",
"host",
"hosting",
"hot",
@@ -9034,6 +8999,7 @@ var nodeLabels = [...]string{
"omega",
"one",
"ong",
+ "onion",
"onl",
"online",
"onyourside",
@@ -9811,6 +9777,7 @@ var nodeLabels = [...]string{
"ac",
"biz",
"co",
+ "futurehosting",
"futuremailing",
"gv",
"info",
@@ -10134,6 +10101,8 @@ var nodeLabels = [...]string{
"gov",
"mil",
"magentosite",
+ "myfusion",
+ "statics",
"cloudns",
"co",
"com",
@@ -10186,8 +10155,9 @@ var nodeLabels = [...]string{
"amazonaws",
"cn-north-1",
"compute",
+ "elb",
+ "elasticbeanstalk",
"s3",
- "cn-north-1",
"arts",
"com",
"edu",
@@ -10209,6 +10179,8 @@ var nodeLabels = [...]string{
"africa",
"alpha-myqnapcloud",
"amazonaws",
+ "appchizi",
+ "applinzi",
"appspot",
"ar",
"betainabox",
@@ -10265,6 +10237,7 @@ var nodeLabels = [...]string{
"familyds",
"fbsbx",
"firebaseapp",
+ "firewall-gateway",
"flynnhub",
"freebox-os",
"freeboxos",
@@ -10429,8 +10402,8 @@ var nodeLabels = [...]string{
"qc",
"quicksytes",
"rackmaze",
+ "remotewd",
"rhcloud",
- "ro",
"ru",
"sa",
"saves-the-whales",
@@ -10472,39 +10445,75 @@ var nodeLabels = [...]string{
"xenapponazure",
"yolasite",
"za",
+ "ap-northeast-1",
"ap-northeast-2",
+ "ap-south-1",
+ "ap-southeast-1",
+ "ap-southeast-2",
+ "ca-central-1",
"compute",
"compute-1",
"elb",
"eu-central-1",
+ "eu-west-1",
"s3",
"s3-ap-northeast-1",
"s3-ap-northeast-2",
+ "s3-ap-south-1",
"s3-ap-southeast-1",
"s3-ap-southeast-2",
+ "s3-ca-central-1",
"s3-eu-central-1",
"s3-eu-west-1",
"s3-external-1",
- "s3-external-2",
"s3-fips-us-gov-west-1",
"s3-sa-east-1",
+ "s3-us-east-2",
"s3-us-gov-west-1",
"s3-us-west-1",
"s3-us-west-2",
+ "s3-website-ap-northeast-1",
+ "s3-website-ap-southeast-1",
+ "s3-website-ap-southeast-2",
+ "s3-website-eu-west-1",
+ "s3-website-sa-east-1",
+ "s3-website-us-east-1",
+ "s3-website-us-west-1",
+ "s3-website-us-west-2",
+ "sa-east-1",
"us-east-1",
+ "us-east-2",
+ "dualstack",
"s3",
- "ap-northeast-1",
- "ap-northeast-2",
- "ap-southeast-1",
- "ap-southeast-2",
- "eu-central-1",
- "eu-west-1",
- "sa-east-1",
- "us-gov-west-1",
- "us-west-1",
- "us-west-2",
- "z-1",
- "z-2",
+ "dualstack",
+ "s3",
+ "s3-website",
+ "s3",
+ "dualstack",
+ "s3",
+ "s3-website",
+ "s3",
+ "dualstack",
+ "s3",
+ "dualstack",
+ "s3",
+ "dualstack",
+ "s3",
+ "s3-website",
+ "s3",
+ "dualstack",
+ "s3",
+ "s3-website",
+ "s3",
+ "dualstack",
+ "s3",
+ "dualstack",
+ "s3",
+ "dualstack",
+ "s3",
+ "dualstack",
+ "s3",
+ "s3-website",
"s3",
"alpha",
"beta",
@@ -10559,17 +10568,46 @@ var nodeLabels = [...]string{
"realm",
"blogspot",
"com",
+ "cosidns",
+ "dd-dns",
+ "ddnss",
"dnshome",
+ "dnsupdater",
+ "dray-dns",
+ "draydns",
+ "dyn-ip24",
+ "dyn-vpn",
+ "dynamisches-dns",
+ "dyndns1",
+ "dynvpn",
+ "firewall-gateway",
"fuettertdasnetz",
"goip",
+ "home-webserver",
+ "internet-dns",
"isteingeek",
"istmein",
"keymachine",
+ "l-o-g-i-n",
"lebtimnetz",
"leitungsen",
"logoip",
+ "mein-vigor",
+ "my-gateway",
+ "my-router",
+ "my-vigor",
+ "my-wan",
+ "myhome-server",
+ "spdns",
+ "syno-ds",
+ "synology-diskstation",
+ "synology-ds",
"taifun-dns",
"traeumtgerade",
+ "dyn",
+ "dyn",
+ "dyndns",
+ "dyn",
"biz",
"blogspot",
"co",
@@ -10648,9 +10686,14 @@ var nodeLabels = [...]string{
"net",
"org",
"cloudns",
+ "diskstation",
"mycd",
+ "spdns",
"transurl",
"wellbeingzone",
+ "party",
+ "user",
+ "ybo",
"aland",
"blogspot",
"dy",
@@ -10679,6 +10722,7 @@ var nodeLabels = [...]string{
"medecin",
"nom",
"notaires",
+ "on-web",
"pharmacien",
"port",
"prd",
@@ -10878,6 +10922,7 @@ var nodeLabels = [...]string{
"barrell-of-knowledge",
"cloudns",
"dvrcam",
+ "dynamic-dns",
"dyndns",
"for-our",
"groks-the",
@@ -10896,16 +10941,22 @@ var nodeLabels = [...]string{
"com",
"dedyn",
"drud",
+ "enonic",
"github",
"gitlab",
"hasura-app",
"hzc",
+ "lair",
"ngrok",
"nid",
"pantheonsite",
"protonet",
"sandcats",
+ "shiftedit",
"spacekit",
+ "stolos",
+ "customer",
+ "apps",
"com",
"edu",
"gov",
@@ -12226,9 +12277,7 @@ var nodeLabels = [...]string{
"aso",
"choyo",
"gyokuto",
- "hitoyoshi",
"kamiamakusa",
- "kashima",
"kikuchi",
"kumamoto",
"mashiki",
@@ -13289,6 +13338,7 @@ var nodeLabels = [...]string{
"priv",
"synology",
"webhop",
+ "yombo",
"co",
"com",
"edu",
@@ -13986,6 +14036,9 @@ var nodeLabels = [...]string{
"endofinternet",
"familyds",
"fastly",
+ "fastlylb",
+ "feste-ip",
+ "firewall-gateway",
"from-az",
"from-co",
"from-la",
@@ -14005,6 +14058,7 @@ var nodeLabels = [...]string{
"isa-geek",
"jp",
"kicks-ass",
+ "knx-server",
"mydissent",
"myeffect",
"myfritz",
@@ -14027,12 +14081,15 @@ var nodeLabels = [...]string{
"serveblog",
"serveftp",
"serveminecraft",
+ "static-access",
"sytes",
+ "t3l3p0rt",
"thruhere",
"uk",
"webhop",
"za",
"r",
+ "map",
"prod",
"ssl",
"a",
@@ -14040,6 +14097,7 @@ var nodeLabels = [...]string{
"a",
"b",
"global",
+ "map",
"alces",
"arts",
"com",
@@ -14883,7 +14941,9 @@ var nodeLabels = [...]string{
"net",
"org",
"pro",
+ "homelink",
"ae",
+ "amune",
"blogdns",
"blogsite",
"bmoattachments",
@@ -14895,6 +14955,8 @@ var nodeLabels = [...]string{
"cloudns",
"collegefan",
"couchpotatofries",
+ "ddnss",
+ "diskstation",
"dnsalias",
"dnsdojo",
"doesntexist",
@@ -14942,6 +15004,8 @@ var nodeLabels = [...]string{
"kicks-ass",
"misconfused",
"mlbfan",
+ "my-firewall",
+ "myfirewall",
"myftp",
"mysecuritycamera",
"nflfan",
@@ -14957,6 +15021,7 @@ var nodeLabels = [...]string{
"servebbs",
"serveftp",
"servegame",
+ "spdns",
"stuff-4-sale",
"sweetpepper",
"tunk",
@@ -14967,6 +15032,7 @@ var nodeLabels = [...]string{
"wmflabs",
"za",
"zapto",
+ "tele",
"c",
"rsc",
"origin",
@@ -15040,6 +15106,7 @@ var nodeLabels = [...]string{
"nom",
"org",
"sld",
+ "ybo",
"blogspot",
"com",
"edu",
@@ -15359,6 +15426,7 @@ var nodeLabels = [...]string{
"blogspot",
"com",
"nom",
+ "ybo",
"arts",
"blogspot",
"com",
@@ -15380,136 +15448,12 @@ var nodeLabels = [...]string{
"in",
"org",
"ac",
- "adygeya",
- "altai",
- "amur",
- "amursk",
- "arkhangelsk",
- "astrakhan",
- "baikal",
- "bashkiria",
- "belgorod",
- "bir",
"blogspot",
- "bryansk",
- "buryatia",
- "cbg",
- "chel",
- "chelyabinsk",
- "chita",
- "chukotka",
- "chuvashia",
- "cmw",
- "com",
- "dagestan",
- "dudinka",
- "e-burg",
"edu",
- "fareast",
"gov",
- "grozny",
"int",
- "irkutsk",
- "ivanovo",
- "izhevsk",
- "jamal",
- "jar",
- "joshkar-ola",
- "k-uralsk",
- "kalmykia",
- "kaluga",
- "kamchatka",
- "karelia",
- "kazan",
- "kchr",
- "kemerovo",
- "khabarovsk",
- "khakassia",
- "khv",
- "kirov",
- "kms",
- "koenig",
- "komi",
- "kostroma",
- "krasnoyarsk",
- "kuban",
- "kurgan",
- "kursk",
- "kustanai",
- "kuzbass",
- "lipetsk",
- "magadan",
- "mari",
- "mari-el",
- "marine",
"mil",
- "mordovia",
- "msk",
- "murmansk",
- "mytis",
- "nakhodka",
- "nalchik",
- "net",
- "nkz",
- "nnov",
- "norilsk",
- "nov",
- "novosibirsk",
- "nsk",
- "omsk",
- "orenburg",
- "org",
- "oryol",
- "oskol",
- "palana",
- "penza",
- "perm",
- "pp",
- "ptz",
- "pyatigorsk",
- "rnd",
- "rubtsovsk",
- "ryazan",
- "sakhalin",
- "samara",
- "saratov",
- "simbirsk",
- "smolensk",
- "snz",
- "spb",
- "stavropol",
- "stv",
- "surgut",
- "syzran",
- "tambov",
- "tatarstan",
"test",
- "tom",
- "tomsk",
- "tsaritsyn",
- "tsk",
- "tula",
- "tuva",
- "tver",
- "tyumen",
- "udm",
- "udmurtia",
- "ulan-ude",
- "vdonsk",
- "vladikavkaz",
- "vladimir",
- "vladivostok",
- "volgograd",
- "vologda",
- "voronezh",
- "vrn",
- "vyatka",
- "yakutia",
- "yamal",
- "yaroslavl",
- "yekaterinburg",
- "yuzhno-sakhalinsk",
- "zgrad",
"ac",
"co",
"com",
@@ -15537,6 +15481,7 @@ var nodeLabels = [...]string{
"gov",
"net",
"org",
+ "ybo",
"com",
"edu",
"gov",
@@ -15598,6 +15543,7 @@ var nodeLabels = [...]string{
"hashbang",
"mil",
"net",
+ "now",
"org",
"platform",
"blogspot",
@@ -15761,6 +15707,7 @@ var nodeLabels = [...]string{
"web",
"blogspot",
"gov",
+ "ybo",
"aero",
"biz",
"co",
@@ -15809,6 +15756,7 @@ var nodeLabels = [...]string{
"sc",
"tv",
"biz",
+ "cc",
"cherkassy",
"cherkasy",
"chernigov",
@@ -15832,6 +15780,7 @@ var nodeLabels = [...]string{
"gov",
"if",
"in",
+ "inf",
"ivano-frankivsk",
"kh",
"kharkiv",
@@ -15849,6 +15798,7 @@ var nodeLabels = [...]string{
"kyiv",
"lg",
"lt",
+ "ltd",
"lugansk",
"lutsk",
"lv",
@@ -15910,6 +15860,7 @@ var nodeLabels = [...]string{
"blogspot",
"no-ip",
"wellbeingzone",
+ "homeoffice",
"service",
"ak",
"al",
diff --git a/vendor/golang.org/x/net/route/address.go b/vendor/golang.org/x/net/route/address.go
index a56909c10..e6bfa39e9 100644
--- a/vendor/golang.org/x/net/route/address.go
+++ b/vendor/golang.org/x/net/route/address.go
@@ -24,6 +24,39 @@ type LinkAddr struct {
// Family implements the Family method of Addr interface.
func (a *LinkAddr) Family() int { return sysAF_LINK }
+func (a *LinkAddr) lenAndSpace() (int, int) {
+ l := 8 + len(a.Name) + len(a.Addr)
+ return l, roundup(l)
+}
+
+func (a *LinkAddr) marshal(b []byte) (int, error) {
+ l, ll := a.lenAndSpace()
+ if len(b) < ll {
+ return 0, errShortBuffer
+ }
+ nlen, alen := len(a.Name), len(a.Addr)
+ if nlen > 255 || alen > 255 {
+ return 0, errInvalidAddr
+ }
+ b[0] = byte(l)
+ b[1] = sysAF_LINK
+ if a.Index > 0 {
+ nativeEndian.PutUint16(b[2:4], uint16(a.Index))
+ }
+ data := b[8:]
+ if nlen > 0 {
+ b[5] = byte(nlen)
+ copy(data[:nlen], a.Addr)
+ data = data[nlen:]
+ }
+ if alen > 0 {
+ b[6] = byte(alen)
+ copy(data[:alen], a.Name)
+ data = data[alen:]
+ }
+ return ll, nil
+}
+
func parseLinkAddr(b []byte) (Addr, error) {
if len(b) < 8 {
return nil, errInvalidAddr
@@ -90,6 +123,21 @@ type Inet4Addr struct {
// Family implements the Family method of Addr interface.
func (a *Inet4Addr) Family() int { return sysAF_INET }
+func (a *Inet4Addr) lenAndSpace() (int, int) {
+ return sizeofSockaddrInet, roundup(sizeofSockaddrInet)
+}
+
+func (a *Inet4Addr) marshal(b []byte) (int, error) {
+ l, ll := a.lenAndSpace()
+ if len(b) < ll {
+ return 0, errShortBuffer
+ }
+ b[0] = byte(l)
+ b[1] = sysAF_INET
+ copy(b[4:8], a.IP[:])
+ return ll, nil
+}
+
// An Inet6Addr represents an internet address for IPv6.
type Inet6Addr struct {
IP [16]byte // IP address
@@ -99,18 +147,36 @@ type Inet6Addr struct {
// Family implements the Family method of Addr interface.
func (a *Inet6Addr) Family() int { return sysAF_INET6 }
+func (a *Inet6Addr) lenAndSpace() (int, int) {
+ return sizeofSockaddrInet6, roundup(sizeofSockaddrInet6)
+}
+
+func (a *Inet6Addr) marshal(b []byte) (int, error) {
+ l, ll := a.lenAndSpace()
+ if len(b) < ll {
+ return 0, errShortBuffer
+ }
+ b[0] = byte(l)
+ b[1] = sysAF_INET6
+ copy(b[8:24], a.IP[:])
+ if a.ZoneID > 0 {
+ nativeEndian.PutUint32(b[24:28], uint32(a.ZoneID))
+ }
+ return ll, nil
+}
+
// parseInetAddr parses b as an internet address for IPv4 or IPv6.
func parseInetAddr(af int, b []byte) (Addr, error) {
switch af {
case sysAF_INET:
- if len(b) < 16 {
+ if len(b) < sizeofSockaddrInet {
return nil, errInvalidAddr
}
a := &Inet4Addr{}
copy(a.IP[:], b[4:8])
return a, nil
case sysAF_INET6:
- if len(b) < 28 {
+ if len(b) < sizeofSockaddrInet6 {
return nil, errInvalidAddr
}
a := &Inet6Addr{ZoneID: int(nativeEndian.Uint32(b[24:28]))}
@@ -174,7 +240,7 @@ func parseKernelInetAddr(af int, b []byte) (int, Addr, error) {
off6 = 8 // offset of in6_addr
)
switch {
- case b[0] == 28: // size of sockaddr_in6
+ case b[0] == sizeofSockaddrInet6:
a := &Inet6Addr{}
copy(a.IP[:], b[off6:off6+16])
return int(b[0]), a, nil
@@ -186,7 +252,7 @@ func parseKernelInetAddr(af int, b []byte) (int, Addr, error) {
copy(a.IP[:], b[l-off6:l])
}
return int(b[0]), a, nil
- case b[0] == 16: // size of sockaddr_in
+ case b[0] == sizeofSockaddrInet:
a := &Inet4Addr{}
copy(a.IP[:], b[off4:off4+4])
return int(b[0]), a, nil
@@ -211,6 +277,24 @@ type DefaultAddr struct {
// Family implements the Family method of Addr interface.
func (a *DefaultAddr) Family() int { return a.af }
+func (a *DefaultAddr) lenAndSpace() (int, int) {
+ l := len(a.Raw)
+ return l, roundup(l)
+}
+
+func (a *DefaultAddr) marshal(b []byte) (int, error) {
+ l, ll := a.lenAndSpace()
+ if len(b) < ll {
+ return 0, errShortBuffer
+ }
+ if l > 255 {
+ return 0, errInvalidAddr
+ }
+ b[1] = byte(l)
+ copy(b[:l], a.Raw)
+ return ll, nil
+}
+
func parseDefaultAddr(b []byte) (Addr, error) {
if len(b) < 2 || len(b) < int(b[0]) {
return nil, errInvalidAddr
@@ -219,6 +303,66 @@ func parseDefaultAddr(b []byte) (Addr, error) {
return a, nil
}
+func addrsSpace(as []Addr) int {
+ var l int
+ for _, a := range as {
+ switch a := a.(type) {
+ case *LinkAddr:
+ _, ll := a.lenAndSpace()
+ l += ll
+ case *Inet4Addr:
+ _, ll := a.lenAndSpace()
+ l += ll
+ case *Inet6Addr:
+ _, ll := a.lenAndSpace()
+ l += ll
+ case *DefaultAddr:
+ _, ll := a.lenAndSpace()
+ l += ll
+ }
+ }
+ return l
+}
+
+// marshalAddrs marshals as and returns a bitmap indicating which
+// address is stored in b.
+func marshalAddrs(b []byte, as []Addr) (uint, error) {
+ var attrs uint
+ for i, a := range as {
+ switch a := a.(type) {
+ case *LinkAddr:
+ l, err := a.marshal(b)
+ if err != nil {
+ return 0, err
+ }
+ b = b[l:]
+ attrs |= 1 << uint(i)
+ case *Inet4Addr:
+ l, err := a.marshal(b)
+ if err != nil {
+ return 0, err
+ }
+ b = b[l:]
+ attrs |= 1 << uint(i)
+ case *Inet6Addr:
+ l, err := a.marshal(b)
+ if err != nil {
+ return 0, err
+ }
+ b = b[l:]
+ attrs |= 1 << uint(i)
+ case *DefaultAddr:
+ l, err := a.marshal(b)
+ if err != nil {
+ return 0, err
+ }
+ b = b[l:]
+ attrs |= 1 << uint(i)
+ }
+ }
+ return attrs, nil
+}
+
func parseAddrs(attrs uint, fn func(int, []byte) (int, Addr, error), b []byte) ([]Addr, error) {
var as [sysRTAX_MAX]Addr
af := int(sysAF_UNSPEC)
diff --git a/vendor/golang.org/x/net/route/binary.go b/vendor/golang.org/x/net/route/binary.go
index 4c561631b..6910520ec 100644
--- a/vendor/golang.org/x/net/route/binary.go
+++ b/vendor/golang.org/x/net/route/binary.go
@@ -9,7 +9,7 @@ package route
// This file contains duplicates of encoding/binary package.
//
// This package is supposed to be used by the net package of standard
-// library. Therefore a package set used in the package must be the
+// library. Therefore the package set used in the package must be the
// same as net package.
var (
diff --git a/vendor/golang.org/x/net/route/defs_darwin.go b/vendor/golang.org/x/net/route/defs_darwin.go
index f452ad14c..e7716442d 100644
--- a/vendor/golang.org/x/net/route/defs_darwin.go
+++ b/vendor/golang.org/x/net/route/defs_darwin.go
@@ -13,6 +13,8 @@ package route
#include <net/if.h>
#include <net/if_dl.h>
#include <net/route.h>
+
+#include <netinet/in.h>
*/
import "C"
@@ -23,6 +25,8 @@ const (
sysAF_LINK = C.AF_LINK
sysAF_INET6 = C.AF_INET6
+ sysSOCK_RAW = C.SOCK_RAW
+
sysNET_RT_DUMP = C.NET_RT_DUMP
sysNET_RT_FLAGS = C.NET_RT_FLAGS
sysNET_RT_IFLIST = C.NET_RT_IFLIST
@@ -103,4 +107,8 @@ const (
sizeofRtMsghdrDarwin15 = C.sizeof_struct_rt_msghdr
sizeofRtMsghdr2Darwin15 = C.sizeof_struct_rt_msghdr2
sizeofRtMetricsDarwin15 = C.sizeof_struct_rt_metrics
+
+ sizeofSockaddrStorage = C.sizeof_struct_sockaddr_storage
+ sizeofSockaddrInet = C.sizeof_struct_sockaddr_in
+ sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
)
diff --git a/vendor/golang.org/x/net/route/defs_dragonfly.go b/vendor/golang.org/x/net/route/defs_dragonfly.go
index c737751d7..dd31de269 100644
--- a/vendor/golang.org/x/net/route/defs_dragonfly.go
+++ b/vendor/golang.org/x/net/route/defs_dragonfly.go
@@ -13,6 +13,8 @@ package route
#include <net/if.h>
#include <net/if_dl.h>
#include <net/route.h>
+
+#include <netinet/in.h>
*/
import "C"
@@ -23,6 +25,8 @@ const (
sysAF_LINK = C.AF_LINK
sysAF_INET6 = C.AF_INET6
+ sysSOCK_RAW = C.SOCK_RAW
+
sysNET_RT_DUMP = C.NET_RT_DUMP
sysNET_RT_FLAGS = C.NET_RT_FLAGS
sysNET_RT_IFLIST = C.NET_RT_IFLIST
@@ -102,4 +106,8 @@ const (
sizeofRtMsghdrDragonFlyBSD4 = C.sizeof_struct_rt_msghdr
sizeofRtMetricsDragonFlyBSD4 = C.sizeof_struct_rt_metrics
+
+ sizeofSockaddrStorage = C.sizeof_struct_sockaddr_storage
+ sizeofSockaddrInet = C.sizeof_struct_sockaddr_in
+ sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
)
diff --git a/vendor/golang.org/x/net/route/defs_freebsd.go b/vendor/golang.org/x/net/route/defs_freebsd.go
index 8f834e81d..d95594d8e 100644
--- a/vendor/golang.org/x/net/route/defs_freebsd.go
+++ b/vendor/golang.org/x/net/route/defs_freebsd.go
@@ -14,6 +14,8 @@ package route
#include <net/if_dl.h>
#include <net/route.h>
+#include <netinet/in.h>
+
struct if_data_freebsd7 {
u_char ifi_type;
u_char ifi_physical;
@@ -222,6 +224,8 @@ const (
sysAF_LINK = C.AF_LINK
sysAF_INET6 = C.AF_INET6
+ sysSOCK_RAW = C.SOCK_RAW
+
sysNET_RT_DUMP = C.NET_RT_DUMP
sysNET_RT_FLAGS = C.NET_RT_FLAGS
sysNET_RT_IFLIST = C.NET_RT_IFLIST
@@ -326,4 +330,8 @@ const (
sizeofIfDataFreeBSD9Emu = C.sizeof_struct_if_data_freebsd9
sizeofIfDataFreeBSD10Emu = C.sizeof_struct_if_data_freebsd10
sizeofIfDataFreeBSD11Emu = C.sizeof_struct_if_data_freebsd11
+
+ sizeofSockaddrStorage = C.sizeof_struct_sockaddr_storage
+ sizeofSockaddrInet = C.sizeof_struct_sockaddr_in
+ sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
)
diff --git a/vendor/golang.org/x/net/route/defs_netbsd.go b/vendor/golang.org/x/net/route/defs_netbsd.go
index b18d85e01..b0abd549a 100644
--- a/vendor/golang.org/x/net/route/defs_netbsd.go
+++ b/vendor/golang.org/x/net/route/defs_netbsd.go
@@ -13,6 +13,8 @@ package route
#include <net/if.h>
#include <net/if_dl.h>
#include <net/route.h>
+
+#include <netinet/in.h>
*/
import "C"
@@ -23,6 +25,8 @@ const (
sysAF_LINK = C.AF_LINK
sysAF_INET6 = C.AF_INET6
+ sysSOCK_RAW = C.SOCK_RAW
+
sysNET_RT_DUMP = C.NET_RT_DUMP
sysNET_RT_FLAGS = C.NET_RT_FLAGS
sysNET_RT_IFLIST = C.NET_RT_IFLIST
@@ -101,4 +105,8 @@ const (
sizeofRtMsghdrNetBSD7 = C.sizeof_struct_rt_msghdr
sizeofRtMetricsNetBSD7 = C.sizeof_struct_rt_metrics
+
+ sizeofSockaddrStorage = C.sizeof_struct_sockaddr_storage
+ sizeofSockaddrInet = C.sizeof_struct_sockaddr_in
+ sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
)
diff --git a/vendor/golang.org/x/net/route/defs_openbsd.go b/vendor/golang.org/x/net/route/defs_openbsd.go
index 5df7a43bc..0f66d3619 100644
--- a/vendor/golang.org/x/net/route/defs_openbsd.go
+++ b/vendor/golang.org/x/net/route/defs_openbsd.go
@@ -13,6 +13,8 @@ package route
#include <net/if.h>
#include <net/if_dl.h>
#include <net/route.h>
+
+#include <netinet/in.h>
*/
import "C"
@@ -23,6 +25,8 @@ const (
sysAF_LINK = C.AF_LINK
sysAF_INET6 = C.AF_INET6
+ sysSOCK_RAW = C.SOCK_RAW
+
sysNET_RT_DUMP = C.NET_RT_DUMP
sysNET_RT_FLAGS = C.NET_RT_FLAGS
sysNET_RT_IFLIST = C.NET_RT_IFLIST
@@ -91,3 +95,11 @@ const (
sysRTAX_LABEL = C.RTAX_LABEL
sysRTAX_MAX = C.RTAX_MAX
)
+
+const (
+ sizeofRtMsghdr = C.sizeof_struct_rt_msghdr
+
+ sizeofSockaddrStorage = C.sizeof_struct_sockaddr_storage
+ sizeofSockaddrInet = C.sizeof_struct_sockaddr_in
+ sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
+)
diff --git a/vendor/golang.org/x/net/route/message.go b/vendor/golang.org/x/net/route/message.go
index d7ae0eb50..0fa7e09f4 100644
--- a/vendor/golang.org/x/net/route/message.go
+++ b/vendor/golang.org/x/net/route/message.go
@@ -7,9 +7,6 @@
package route
// A Message represents a routing message.
-//
-// Note: This interface will be changed to support Marshal method in
-// future version.
type Message interface {
// Sys returns operating system-specific information.
Sys() []Sys
@@ -52,11 +49,10 @@ func ParseRIB(typ RIBType, b []byte) ([]Message, error) {
b = b[l:]
continue
}
- mtyp := int(b[3])
- if fn, ok := parseFns[mtyp]; !ok {
+ if w, ok := wireFormats[int(b[3])]; !ok {
nskips++
} else {
- m, err := fn(typ, b)
+ m, err := w.parse(typ, b)
if err != nil {
return nil, err
}
diff --git a/vendor/golang.org/x/net/route/message_test.go b/vendor/golang.org/x/net/route/message_test.go
index c0c7c57a9..b3bc60c62 100644
--- a/vendor/golang.org/x/net/route/message_test.go
+++ b/vendor/golang.org/x/net/route/message_test.go
@@ -33,11 +33,28 @@ func TestFetchAndParseRIB(t *testing.T) {
}
}
+var (
+ rtmonSock int
+ rtmonErr error
+)
+
+func init() {
+ // We need to keep rtmonSock alive to avoid treading on
+ // recycled socket descriptors.
+ rtmonSock, rtmonErr = syscall.Socket(sysAF_ROUTE, sysSOCK_RAW, sysAF_UNSPEC)
+}
+
+// TestMonitorAndParseRIB leaks a worker goroutine and a socket
+// descriptor but that's intentional.
func TestMonitorAndParseRIB(t *testing.T) {
if testing.Short() || os.Getuid() != 0 {
t.Skip("must be root")
}
+ if rtmonErr != nil {
+ t.Fatal(rtmonErr)
+ }
+
// We suppose that using an IPv4 link-local address and the
// dot1Q ID for Token Ring and FDDI doesn't harm anyone.
pv := &propVirtual{addr: "169.254.0.1", mask: "255.255.255.0"}
@@ -49,16 +66,18 @@ func TestMonitorAndParseRIB(t *testing.T) {
}
pv.teardown()
- s, err := syscall.Socket(syscall.AF_ROUTE, syscall.SOCK_RAW, syscall.AF_UNSPEC)
- if err != nil {
- t.Fatal(err)
- }
- defer syscall.Close(s)
-
go func() {
b := make([]byte, os.Getpagesize())
for {
- n, err := syscall.Read(s, b)
+ // There's no easy way to unblock this read
+ // call because the routing message exchange
+ // over routing socket is a connectionless
+ // message-oriented protocol, no control plane
+ // for signaling connectivity, and we cannot
+ // use the net package of standard library due
+ // to the lack of support for routing socket
+ // and circular dependency.
+ n, err := syscall.Read(rtmonSock, b)
if err != nil {
return
}
@@ -116,3 +135,99 @@ func TestParseRIBWithFuzz(t *testing.T) {
}
}
}
+
+func TestRouteMessage(t *testing.T) {
+ s, err := syscall.Socket(sysAF_ROUTE, sysSOCK_RAW, sysAF_UNSPEC)
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer syscall.Close(s)
+
+ var ms []RouteMessage
+ for _, af := range []int{sysAF_INET, sysAF_INET6} {
+ rs, err := fetchAndParseRIB(af, sysNET_RT_DUMP)
+ if err != nil || len(rs) == 0 {
+ continue
+ }
+ switch af {
+ case sysAF_INET:
+ ms = append(ms, []RouteMessage{
+ {
+ Type: sysRTM_GET,
+ Addrs: []Addr{
+ &Inet4Addr{IP: [4]byte{127, 0, 0, 1}},
+ nil,
+ nil,
+ nil,
+ &LinkAddr{},
+ &Inet4Addr{},
+ nil,
+ &Inet4Addr{},
+ },
+ },
+ {
+ Type: sysRTM_GET,
+ Addrs: []Addr{
+ &Inet4Addr{IP: [4]byte{127, 0, 0, 1}},
+ },
+ },
+ }...)
+ case sysAF_INET6:
+ ms = append(ms, []RouteMessage{
+ {
+ Type: sysRTM_GET,
+ Addrs: []Addr{
+ &Inet6Addr{IP: [16]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}},
+ nil,
+ nil,
+ nil,
+ &LinkAddr{},
+ &Inet6Addr{},
+ nil,
+ &Inet6Addr{},
+ },
+ },
+ {
+ Type: sysRTM_GET,
+ Addrs: []Addr{
+ &Inet6Addr{IP: [16]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}},
+ },
+ },
+ }...)
+ }
+ }
+ for i, m := range ms {
+ m.ID = uintptr(os.Getpid())
+ m.Seq = i + 1
+ wb, err := m.Marshal()
+ if err != nil {
+ t.Fatalf("%v: %v", m, err)
+ }
+ if _, err := syscall.Write(s, wb); err != nil {
+ t.Fatalf("%v: %v", m, err)
+ }
+ rb := make([]byte, os.Getpagesize())
+ n, err := syscall.Read(s, rb)
+ if err != nil {
+ t.Fatalf("%v: %v", m, err)
+ }
+ rms, err := ParseRIB(0, rb[:n])
+ if err != nil {
+ t.Fatalf("%v: %v", m, err)
+ }
+ for _, rm := range rms {
+ err := rm.(*RouteMessage).Err
+ if err != nil {
+ t.Errorf("%v: %v", m, err)
+ }
+ }
+ ss, err := msgs(rms).validate()
+ if err != nil {
+ t.Fatalf("%v: %v", m, err)
+ }
+ for _, s := range ss {
+ t.Log(s)
+ }
+
+ }
+}
diff --git a/vendor/golang.org/x/net/route/route.go b/vendor/golang.org/x/net/route/route.go
index c986e29eb..081da0d5c 100644
--- a/vendor/golang.org/x/net/route/route.go
+++ b/vendor/golang.org/x/net/route/route.go
@@ -24,21 +24,70 @@ var (
errMessageTooShort = errors.New("message too short")
errInvalidMessage = errors.New("invalid message")
errInvalidAddr = errors.New("invalid address")
+ errShortBuffer = errors.New("short buffer")
)
// A RouteMessage represents a message conveying an address prefix, a
// nexthop address and an output interface.
+//
+// Unlike other messages, this message can be used to query adjacency
+// information for the given address prefix, to add a new route, and
+// to delete or modify the existing route from the routing information
+// base inside the kernel by writing and reading route messages on a
+// routing socket.
+//
+// For the manipulation of routing information, the route message must
+// contain appropriate fields that include:
+//
+// Version = <must be specified>
+// Type = <must be specified>
+// Flags = <must be specified>
+// Index = <must be specified if necessary>
+// ID = <must be specified>
+// Seq = <must be specified>
+// Addrs = <must be specified>
+//
+// The Type field specifies a type of manipulation, the Flags field
+// specifies a class of target information and the Addrs field
+// specifies target information like the following:
+//
+// route.RouteMessage{
+// Version: RTM_VERSION,
+// Type: RTM_GET,
+// Flags: RTF_UP | RTF_HOST,
+// ID: uintptr(os.Getpid()),
+// Seq: 1,
+// Addrs: []route.Addrs{
+// RTAX_DST: &route.Inet4Addr{ ... },
+// RTAX_IFP: &route.LinkAddr{ ... },
+// RTAX_BRD: &route.Inet4Addr{ ... },
+// },
+// }
+//
+// The values for the above fields depend on the implementation of
+// each operating system.
+//
+// The Err field on a response message contains an error value on the
+// requested operation. If non-nil, the requested operation is failed.
type RouteMessage struct {
- Version int // message version
- Type int // message type
- Flags int // route flags
- Index int // interface index when atatched
- Addrs []Addr // addresses
+ Version int // message version
+ Type int // message type
+ Flags int // route flags
+ Index int // interface index when atatched
+ ID uintptr // sender's identifier; usually process ID
+ Seq int // sequence number
+ Err error // error on requested operation
+ Addrs []Addr // addresses
extOff int // offset of header extension
raw []byte // raw message
}
+// Marshal returns the binary encoding of m.
+func (m *RouteMessage) Marshal() ([]byte, error) {
+ return m.marshal()
+}
+
// A RIBType reprensents a type of routing information base.
type RIBType int
diff --git a/vendor/golang.org/x/net/route/route_classic.go b/vendor/golang.org/x/net/route/route_classic.go
index d333c6aa5..61b2bb4ad 100644
--- a/vendor/golang.org/x/net/route/route_classic.go
+++ b/vendor/golang.org/x/net/route/route_classic.go
@@ -6,6 +6,36 @@
package route
+import "syscall"
+
+func (m *RouteMessage) marshal() ([]byte, error) {
+ w, ok := wireFormats[m.Type]
+ if !ok {
+ return nil, errUnsupportedMessage
+ }
+ l := w.bodyOff + addrsSpace(m.Addrs)
+ b := make([]byte, l)
+ nativeEndian.PutUint16(b[:2], uint16(l))
+ if m.Version == 0 {
+ b[2] = sysRTM_VERSION
+ } else {
+ b[2] = byte(m.Version)
+ }
+ b[3] = byte(m.Type)
+ nativeEndian.PutUint32(b[8:12], uint32(m.Flags))
+ nativeEndian.PutUint16(b[4:6], uint16(m.Index))
+ nativeEndian.PutUint32(b[16:20], uint32(m.ID))
+ nativeEndian.PutUint32(b[20:24], uint32(m.Seq))
+ attrs, err := marshalAddrs(b[w.bodyOff:], m.Addrs)
+ if err != nil {
+ return nil, err
+ }
+ if attrs > 0 {
+ nativeEndian.PutUint32(b[12:16], uint32(attrs))
+ }
+ return b, nil
+}
+
func (w *wireFormat) parseRouteMessage(typ RIBType, b []byte) (Message, error) {
if len(b) < w.bodyOff {
return nil, errMessageTooShort
@@ -19,9 +49,15 @@ func (w *wireFormat) parseRouteMessage(typ RIBType, b []byte) (Message, error) {
Type: int(b[3]),
Flags: int(nativeEndian.Uint32(b[8:12])),
Index: int(nativeEndian.Uint16(b[4:6])),
+ ID: uintptr(nativeEndian.Uint32(b[16:20])),
+ Seq: int(nativeEndian.Uint32(b[20:24])),
extOff: w.extOff,
raw: b[:l],
}
+ errno := syscall.Errno(nativeEndian.Uint32(b[28:32]))
+ if errno != 0 {
+ m.Err = errno
+ }
var err error
m.Addrs, err = parseAddrs(uint(nativeEndian.Uint32(b[12:16])), parseKernelInetAddr, b[w.bodyOff:])
if err != nil {
diff --git a/vendor/golang.org/x/net/route/route_openbsd.go b/vendor/golang.org/x/net/route/route_openbsd.go
index 76eae40d8..daf2e90c4 100644
--- a/vendor/golang.org/x/net/route/route_openbsd.go
+++ b/vendor/golang.org/x/net/route/route_openbsd.go
@@ -4,8 +4,35 @@
package route
+import "syscall"
+
+func (m *RouteMessage) marshal() ([]byte, error) {
+ l := sizeofRtMsghdr + addrsSpace(m.Addrs)
+ b := make([]byte, l)
+ nativeEndian.PutUint16(b[:2], uint16(l))
+ if m.Version == 0 {
+ b[2] = sysRTM_VERSION
+ } else {
+ b[2] = byte(m.Version)
+ }
+ b[3] = byte(m.Type)
+ nativeEndian.PutUint16(b[4:6], uint16(sizeofRtMsghdr))
+ nativeEndian.PutUint32(b[16:20], uint32(m.Flags))
+ nativeEndian.PutUint16(b[6:8], uint16(m.Index))
+ nativeEndian.PutUint32(b[24:28], uint32(m.ID))
+ nativeEndian.PutUint32(b[28:32], uint32(m.Seq))
+ attrs, err := marshalAddrs(b[sizeofRtMsghdr:], m.Addrs)
+ if err != nil {
+ return nil, err
+ }
+ if attrs > 0 {
+ nativeEndian.PutUint32(b[12:16], uint32(attrs))
+ }
+ return b, nil
+}
+
func (*wireFormat) parseRouteMessage(_ RIBType, b []byte) (Message, error) {
- if len(b) < 40 {
+ if len(b) < sizeofRtMsghdr {
return nil, errMessageTooShort
}
l := int(nativeEndian.Uint16(b[:2]))
@@ -17,12 +44,18 @@ func (*wireFormat) parseRouteMessage(_ RIBType, b []byte) (Message, error) {
Type: int(b[3]),
Flags: int(nativeEndian.Uint32(b[16:20])),
Index: int(nativeEndian.Uint16(b[6:8])),
+ ID: uintptr(nativeEndian.Uint32(b[24:28])),
+ Seq: int(nativeEndian.Uint32(b[28:32])),
raw: b[:l],
}
ll := int(nativeEndian.Uint16(b[4:6]))
if len(b) < ll {
return nil, errInvalidMessage
}
+ errno := syscall.Errno(nativeEndian.Uint32(b[32:36]))
+ if errno != 0 {
+ m.Err = errno
+ }
as, err := parseAddrs(uint(nativeEndian.Uint32(b[12:16])), parseKernelInetAddr, b[ll:])
if err != nil {
return nil, err
diff --git a/vendor/golang.org/x/net/route/sys.go b/vendor/golang.org/x/net/route/sys.go
index 80ca83ae1..3d0ee9b14 100644
--- a/vendor/golang.org/x/net/route/sys.go
+++ b/vendor/golang.org/x/net/route/sys.go
@@ -11,7 +11,7 @@ import "unsafe"
var (
nativeEndian binaryByteOrder
kernelAlign int
- parseFns map[int]parseFn
+ wireFormats map[int]*wireFormat
)
func init() {
@@ -22,7 +22,7 @@ func init() {
} else {
nativeEndian = bigEndian
}
- kernelAlign, parseFns = probeRoutingStack()
+ kernelAlign, wireFormats = probeRoutingStack()
}
func roundup(l int) int {
@@ -32,9 +32,8 @@ func roundup(l int) int {
return (l + kernelAlign - 1) & ^(kernelAlign - 1)
}
-type parseFn func(RIBType, []byte) (Message, error)
-
type wireFormat struct {
extOff int // offset of header extension
bodyOff int // offset of message body
+ parse func(RIBType, []byte) (Message, error)
}
diff --git a/vendor/golang.org/x/net/route/sys_darwin.go b/vendor/golang.org/x/net/route/sys_darwin.go
index fff3a0fd1..e742c919d 100644
--- a/vendor/golang.org/x/net/route/sys_darwin.go
+++ b/vendor/golang.org/x/net/route/sys_darwin.go
@@ -49,32 +49,39 @@ func (m *InterfaceMessage) Sys() []Sys {
}
}
-func probeRoutingStack() (int, map[int]parseFn) {
+func probeRoutingStack() (int, map[int]*wireFormat) {
rtm := &wireFormat{extOff: 36, bodyOff: sizeofRtMsghdrDarwin15}
+ rtm.parse = rtm.parseRouteMessage
rtm2 := &wireFormat{extOff: 36, bodyOff: sizeofRtMsghdr2Darwin15}
+ rtm2.parse = rtm2.parseRouteMessage
ifm := &wireFormat{extOff: 16, bodyOff: sizeofIfMsghdrDarwin15}
+ ifm.parse = ifm.parseInterfaceMessage
ifm2 := &wireFormat{extOff: 32, bodyOff: sizeofIfMsghdr2Darwin15}
+ ifm2.parse = ifm2.parseInterfaceMessage
ifam := &wireFormat{extOff: sizeofIfaMsghdrDarwin15, bodyOff: sizeofIfaMsghdrDarwin15}
+ ifam.parse = ifam.parseInterfaceAddrMessage
ifmam := &wireFormat{extOff: sizeofIfmaMsghdrDarwin15, bodyOff: sizeofIfmaMsghdrDarwin15}
+ ifmam.parse = ifmam.parseInterfaceMulticastAddrMessage
ifmam2 := &wireFormat{extOff: sizeofIfmaMsghdr2Darwin15, bodyOff: sizeofIfmaMsghdr2Darwin15}
+ ifmam2.parse = ifmam2.parseInterfaceMulticastAddrMessage
// Darwin kernels require 32-bit aligned access to routing facilities.
- return 4, map[int]parseFn{
- sysRTM_ADD: rtm.parseRouteMessage,
- sysRTM_DELETE: rtm.parseRouteMessage,
- sysRTM_CHANGE: rtm.parseRouteMessage,
- sysRTM_GET: rtm.parseRouteMessage,
- sysRTM_LOSING: rtm.parseRouteMessage,
- sysRTM_REDIRECT: rtm.parseRouteMessage,
- sysRTM_MISS: rtm.parseRouteMessage,
- sysRTM_LOCK: rtm.parseRouteMessage,
- sysRTM_RESOLVE: rtm.parseRouteMessage,
- sysRTM_NEWADDR: ifam.parseInterfaceAddrMessage,
- sysRTM_DELADDR: ifam.parseInterfaceAddrMessage,
- sysRTM_IFINFO: ifm.parseInterfaceMessage,
- sysRTM_NEWMADDR: ifmam.parseInterfaceMulticastAddrMessage,
- sysRTM_DELMADDR: ifmam.parseInterfaceMulticastAddrMessage,
- sysRTM_IFINFO2: ifm2.parseInterfaceMessage,
- sysRTM_NEWMADDR2: ifmam2.parseInterfaceMulticastAddrMessage,
- sysRTM_GET2: rtm2.parseRouteMessage,
+ return 4, map[int]*wireFormat{
+ sysRTM_ADD: rtm,
+ sysRTM_DELETE: rtm,
+ sysRTM_CHANGE: rtm,
+ sysRTM_GET: rtm,
+ sysRTM_LOSING: rtm,
+ sysRTM_REDIRECT: rtm,
+ sysRTM_MISS: rtm,
+ sysRTM_LOCK: rtm,
+ sysRTM_RESOLVE: rtm,
+ sysRTM_NEWADDR: ifam,
+ sysRTM_DELADDR: ifam,
+ sysRTM_IFINFO: ifm,
+ sysRTM_NEWMADDR: ifmam,
+ sysRTM_DELMADDR: ifmam,
+ sysRTM_IFINFO2: ifm2,
+ sysRTM_NEWMADDR2: ifmam2,
+ sysRTM_GET2: rtm2,
}
}
diff --git a/vendor/golang.org/x/net/route/sys_dragonfly.go b/vendor/golang.org/x/net/route/sys_dragonfly.go
index da848b3d0..b175cb18c 100644
--- a/vendor/golang.org/x/net/route/sys_dragonfly.go
+++ b/vendor/golang.org/x/net/route/sys_dragonfly.go
@@ -44,28 +44,33 @@ func (m *InterfaceMessage) Sys() []Sys {
}
}
-func probeRoutingStack() (int, map[int]parseFn) {
+func probeRoutingStack() (int, map[int]*wireFormat) {
var p uintptr
rtm := &wireFormat{extOff: 40, bodyOff: sizeofRtMsghdrDragonFlyBSD4}
+ rtm.parse = rtm.parseRouteMessage
ifm := &wireFormat{extOff: 16, bodyOff: sizeofIfMsghdrDragonFlyBSD4}
+ ifm.parse = ifm.parseInterfaceMessage
ifam := &wireFormat{extOff: sizeofIfaMsghdrDragonFlyBSD4, bodyOff: sizeofIfaMsghdrDragonFlyBSD4}
+ ifam.parse = ifam.parseInterfaceAddrMessage
ifmam := &wireFormat{extOff: sizeofIfmaMsghdrDragonFlyBSD4, bodyOff: sizeofIfmaMsghdrDragonFlyBSD4}
+ ifmam.parse = ifmam.parseInterfaceMulticastAddrMessage
ifanm := &wireFormat{extOff: sizeofIfAnnouncemsghdrDragonFlyBSD4, bodyOff: sizeofIfAnnouncemsghdrDragonFlyBSD4}
- return int(unsafe.Sizeof(p)), map[int]parseFn{
- sysRTM_ADD: rtm.parseRouteMessage,
- sysRTM_DELETE: rtm.parseRouteMessage,
- sysRTM_CHANGE: rtm.parseRouteMessage,
- sysRTM_GET: rtm.parseRouteMessage,
- sysRTM_LOSING: rtm.parseRouteMessage,
- sysRTM_REDIRECT: rtm.parseRouteMessage,
- sysRTM_MISS: rtm.parseRouteMessage,
- sysRTM_LOCK: rtm.parseRouteMessage,
- sysRTM_RESOLVE: rtm.parseRouteMessage,
- sysRTM_NEWADDR: ifam.parseInterfaceAddrMessage,
- sysRTM_DELADDR: ifam.parseInterfaceAddrMessage,
- sysRTM_IFINFO: ifm.parseInterfaceMessage,
- sysRTM_NEWMADDR: ifmam.parseInterfaceMulticastAddrMessage,
- sysRTM_DELMADDR: ifmam.parseInterfaceMulticastAddrMessage,
- sysRTM_IFANNOUNCE: ifanm.parseInterfaceAnnounceMessage,
+ ifanm.parse = ifanm.parseInterfaceAnnounceMessage
+ return int(unsafe.Sizeof(p)), map[int]*wireFormat{
+ sysRTM_ADD: rtm,
+ sysRTM_DELETE: rtm,
+ sysRTM_CHANGE: rtm,
+ sysRTM_GET: rtm,
+ sysRTM_LOSING: rtm,
+ sysRTM_REDIRECT: rtm,
+ sysRTM_MISS: rtm,
+ sysRTM_LOCK: rtm,
+ sysRTM_RESOLVE: rtm,
+ sysRTM_NEWADDR: ifam,
+ sysRTM_DELADDR: ifam,
+ sysRTM_IFINFO: ifm,
+ sysRTM_NEWMADDR: ifmam,
+ sysRTM_DELMADDR: ifmam,
+ sysRTM_IFANNOUNCE: ifanm,
}
}
diff --git a/vendor/golang.org/x/net/route/sys_freebsd.go b/vendor/golang.org/x/net/route/sys_freebsd.go
index 7b05c1a5a..010d4ae78 100644
--- a/vendor/golang.org/x/net/route/sys_freebsd.go
+++ b/vendor/golang.org/x/net/route/sys_freebsd.go
@@ -54,7 +54,7 @@ func (m *InterfaceMessage) Sys() []Sys {
}
}
-func probeRoutingStack() (int, map[int]parseFn) {
+func probeRoutingStack() (int, map[int]*wireFormat) {
var p uintptr
wordSize := int(unsafe.Sizeof(p))
align := int(unsafe.Sizeof(p))
@@ -130,21 +130,26 @@ func probeRoutingStack() (int, map[int]parseFn) {
ifm.bodyOff = sizeofIfMsghdrFreeBSD11
}
}
- return align, map[int]parseFn{
- sysRTM_ADD: rtm.parseRouteMessage,
- sysRTM_DELETE: rtm.parseRouteMessage,
- sysRTM_CHANGE: rtm.parseRouteMessage,
- sysRTM_GET: rtm.parseRouteMessage,
- sysRTM_LOSING: rtm.parseRouteMessage,
- sysRTM_REDIRECT: rtm.parseRouteMessage,
- sysRTM_MISS: rtm.parseRouteMessage,
- sysRTM_LOCK: rtm.parseRouteMessage,
- sysRTM_RESOLVE: rtm.parseRouteMessage,
- sysRTM_NEWADDR: ifam.parseInterfaceAddrMessage,
- sysRTM_DELADDR: ifam.parseInterfaceAddrMessage,
- sysRTM_IFINFO: ifm.parseInterfaceMessage,
- sysRTM_NEWMADDR: ifmam.parseInterfaceMulticastAddrMessage,
- sysRTM_DELMADDR: ifmam.parseInterfaceMulticastAddrMessage,
- sysRTM_IFANNOUNCE: ifanm.parseInterfaceAnnounceMessage,
+ rtm.parse = rtm.parseRouteMessage
+ ifm.parse = ifm.parseInterfaceMessage
+ ifam.parse = ifam.parseInterfaceAddrMessage
+ ifmam.parse = ifmam.parseInterfaceMulticastAddrMessage
+ ifanm.parse = ifanm.parseInterfaceAnnounceMessage
+ return align, map[int]*wireFormat{
+ sysRTM_ADD: rtm,
+ sysRTM_DELETE: rtm,
+ sysRTM_CHANGE: rtm,
+ sysRTM_GET: rtm,
+ sysRTM_LOSING: rtm,
+ sysRTM_REDIRECT: rtm,
+ sysRTM_MISS: rtm,
+ sysRTM_LOCK: rtm,
+ sysRTM_RESOLVE: rtm,
+ sysRTM_NEWADDR: ifam,
+ sysRTM_DELADDR: ifam,
+ sysRTM_IFINFO: ifm,
+ sysRTM_NEWMADDR: ifmam,
+ sysRTM_DELMADDR: ifmam,
+ sysRTM_IFANNOUNCE: ifanm,
}
}
diff --git a/vendor/golang.org/x/net/route/sys_netbsd.go b/vendor/golang.org/x/net/route/sys_netbsd.go
index 4d8076b51..b4e330140 100644
--- a/vendor/golang.org/x/net/route/sys_netbsd.go
+++ b/vendor/golang.org/x/net/route/sys_netbsd.go
@@ -42,26 +42,30 @@ func (m *InterfaceMessage) Sys() []Sys {
}
}
-func probeRoutingStack() (int, map[int]parseFn) {
+func probeRoutingStack() (int, map[int]*wireFormat) {
rtm := &wireFormat{extOff: 40, bodyOff: sizeofRtMsghdrNetBSD7}
+ rtm.parse = rtm.parseRouteMessage
ifm := &wireFormat{extOff: 16, bodyOff: sizeofIfMsghdrNetBSD7}
+ ifm.parse = ifm.parseInterfaceMessage
ifam := &wireFormat{extOff: sizeofIfaMsghdrNetBSD7, bodyOff: sizeofIfaMsghdrNetBSD7}
+ ifam.parse = ifam.parseInterfaceAddrMessage
ifanm := &wireFormat{extOff: sizeofIfAnnouncemsghdrNetBSD7, bodyOff: sizeofIfAnnouncemsghdrNetBSD7}
+ ifanm.parse = ifanm.parseInterfaceAnnounceMessage
// NetBSD 6 and above kernels require 64-bit aligned access to
// routing facilities.
- return 8, map[int]parseFn{
- sysRTM_ADD: rtm.parseRouteMessage,
- sysRTM_DELETE: rtm.parseRouteMessage,
- sysRTM_CHANGE: rtm.parseRouteMessage,
- sysRTM_GET: rtm.parseRouteMessage,
- sysRTM_LOSING: rtm.parseRouteMessage,
- sysRTM_REDIRECT: rtm.parseRouteMessage,
- sysRTM_MISS: rtm.parseRouteMessage,
- sysRTM_LOCK: rtm.parseRouteMessage,
- sysRTM_RESOLVE: rtm.parseRouteMessage,
- sysRTM_NEWADDR: ifam.parseInterfaceAddrMessage,
- sysRTM_DELADDR: ifam.parseInterfaceAddrMessage,
- sysRTM_IFANNOUNCE: ifanm.parseInterfaceAnnounceMessage,
- sysRTM_IFINFO: ifm.parseInterfaceMessage,
+ return 8, map[int]*wireFormat{
+ sysRTM_ADD: rtm,
+ sysRTM_DELETE: rtm,
+ sysRTM_CHANGE: rtm,
+ sysRTM_GET: rtm,
+ sysRTM_LOSING: rtm,
+ sysRTM_REDIRECT: rtm,
+ sysRTM_MISS: rtm,
+ sysRTM_LOCK: rtm,
+ sysRTM_RESOLVE: rtm,
+ sysRTM_NEWADDR: ifam,
+ sysRTM_DELADDR: ifam,
+ sysRTM_IFANNOUNCE: ifanm,
+ sysRTM_IFINFO: ifm,
}
}
diff --git a/vendor/golang.org/x/net/route/sys_openbsd.go b/vendor/golang.org/x/net/route/sys_openbsd.go
index 26d043869..8798dc4ca 100644
--- a/vendor/golang.org/x/net/route/sys_openbsd.go
+++ b/vendor/golang.org/x/net/route/sys_openbsd.go
@@ -51,22 +51,29 @@ func (m *InterfaceMessage) Sys() []Sys {
}
}
-func probeRoutingStack() (int, map[int]parseFn) {
+func probeRoutingStack() (int, map[int]*wireFormat) {
var p uintptr
- nooff := &wireFormat{extOff: -1, bodyOff: -1}
- return int(unsafe.Sizeof(p)), map[int]parseFn{
- sysRTM_ADD: nooff.parseRouteMessage,
- sysRTM_DELETE: nooff.parseRouteMessage,
- sysRTM_CHANGE: nooff.parseRouteMessage,
- sysRTM_GET: nooff.parseRouteMessage,
- sysRTM_LOSING: nooff.parseRouteMessage,
- sysRTM_REDIRECT: nooff.parseRouteMessage,
- sysRTM_MISS: nooff.parseRouteMessage,
- sysRTM_LOCK: nooff.parseRouteMessage,
- sysRTM_RESOLVE: nooff.parseRouteMessage,
- sysRTM_NEWADDR: nooff.parseInterfaceAddrMessage,
- sysRTM_DELADDR: nooff.parseInterfaceAddrMessage,
- sysRTM_IFINFO: nooff.parseInterfaceMessage,
- sysRTM_IFANNOUNCE: nooff.parseInterfaceAnnounceMessage,
+ rtm := &wireFormat{extOff: -1, bodyOff: -1}
+ rtm.parse = rtm.parseRouteMessage
+ ifm := &wireFormat{extOff: -1, bodyOff: -1}
+ ifm.parse = ifm.parseInterfaceMessage
+ ifam := &wireFormat{extOff: -1, bodyOff: -1}
+ ifam.parse = ifam.parseInterfaceAddrMessage
+ ifanm := &wireFormat{extOff: -1, bodyOff: -1}
+ ifanm.parse = ifanm.parseInterfaceAnnounceMessage
+ return int(unsafe.Sizeof(p)), map[int]*wireFormat{
+ sysRTM_ADD: rtm,
+ sysRTM_DELETE: rtm,
+ sysRTM_CHANGE: rtm,
+ sysRTM_GET: rtm,
+ sysRTM_LOSING: rtm,
+ sysRTM_REDIRECT: rtm,
+ sysRTM_MISS: rtm,
+ sysRTM_LOCK: rtm,
+ sysRTM_RESOLVE: rtm,
+ sysRTM_NEWADDR: ifam,
+ sysRTM_DELADDR: ifam,
+ sysRTM_IFINFO: ifm,
+ sysRTM_IFANNOUNCE: ifanm,
}
}
diff --git a/vendor/golang.org/x/net/route/syscall.go b/vendor/golang.org/x/net/route/syscall.go
index d136325a3..c211188b1 100644
--- a/vendor/golang.org/x/net/route/syscall.go
+++ b/vendor/golang.org/x/net/route/syscall.go
@@ -11,10 +11,6 @@ import (
"unsafe"
)
-// TODO: replace with runtime.KeepAlive when available
-//go:noescape
-func keepAlive(p unsafe.Pointer)
-
var zero uintptr
func sysctl(mib []int32, old *byte, oldlen *uintptr, new *byte, newlen uintptr) error {
@@ -25,7 +21,6 @@ func sysctl(mib []int32, old *byte, oldlen *uintptr, new *byte, newlen uintptr)
p = unsafe.Pointer(&zero)
}
_, _, errno := syscall.Syscall6(syscall.SYS___SYSCTL, uintptr(p), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
- keepAlive(p)
if errno != 0 {
return error(errno)
}
diff --git a/vendor/golang.org/x/net/route/syscall.s b/vendor/golang.org/x/net/route/syscall.s
deleted file mode 100644
index fa6297f0a..000000000
--- a/vendor/golang.org/x/net/route/syscall.s
+++ /dev/null
@@ -1,8 +0,0 @@
-// 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.
-
-#include "textflag.h"
-
-TEXT ·keepAlive(SB),NOSPLIT,$0
- RET
diff --git a/vendor/golang.org/x/net/route/zsys_darwin.go b/vendor/golang.org/x/net/route/zsys_darwin.go
index 265b81cd5..4e2e1ab09 100644
--- a/vendor/golang.org/x/net/route/zsys_darwin.go
+++ b/vendor/golang.org/x/net/route/zsys_darwin.go
@@ -10,6 +10,8 @@ const (
sysAF_LINK = 0x12
sysAF_INET6 = 0x1e
+ sysSOCK_RAW = 0x3
+
sysNET_RT_DUMP = 0x1
sysNET_RT_FLAGS = 0x2
sysNET_RT_IFLIST = 0x3
@@ -90,4 +92,8 @@ const (
sizeofRtMsghdrDarwin15 = 0x5c
sizeofRtMsghdr2Darwin15 = 0x5c
sizeofRtMetricsDarwin15 = 0x38
+
+ sizeofSockaddrStorage = 0x80
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x1c
)
diff --git a/vendor/golang.org/x/net/route/zsys_dragonfly.go b/vendor/golang.org/x/net/route/zsys_dragonfly.go
index dd36dece0..719c88d11 100644
--- a/vendor/golang.org/x/net/route/zsys_dragonfly.go
+++ b/vendor/golang.org/x/net/route/zsys_dragonfly.go
@@ -10,6 +10,8 @@ const (
sysAF_LINK = 0x12
sysAF_INET6 = 0x1c
+ sysSOCK_RAW = 0x3
+
sysNET_RT_DUMP = 0x1
sysNET_RT_FLAGS = 0x2
sysNET_RT_IFLIST = 0x3
@@ -89,4 +91,8 @@ const (
sizeofRtMsghdrDragonFlyBSD4 = 0x98
sizeofRtMetricsDragonFlyBSD4 = 0x70
+
+ sizeofSockaddrStorage = 0x80
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x1c
)
diff --git a/vendor/golang.org/x/net/route/zsys_freebsd_386.go b/vendor/golang.org/x/net/route/zsys_freebsd_386.go
index 9bac2e390..b03bc01f6 100644
--- a/vendor/golang.org/x/net/route/zsys_freebsd_386.go
+++ b/vendor/golang.org/x/net/route/zsys_freebsd_386.go
@@ -10,6 +10,8 @@ const (
sysAF_LINK = 0x12
sysAF_INET6 = 0x1c
+ sysSOCK_RAW = 0x3
+
sysNET_RT_DUMP = 0x1
sysNET_RT_FLAGS = 0x2
sysNET_RT_IFLIST = 0x3
@@ -117,4 +119,8 @@ const (
sizeofIfDataFreeBSD9Emu = 0x98
sizeofIfDataFreeBSD10Emu = 0x98
sizeofIfDataFreeBSD11Emu = 0x98
+
+ sizeofSockaddrStorage = 0x80
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x1c
)
diff --git a/vendor/golang.org/x/net/route/zsys_freebsd_amd64.go b/vendor/golang.org/x/net/route/zsys_freebsd_amd64.go
index b1920d7ac..0b675b3d3 100644
--- a/vendor/golang.org/x/net/route/zsys_freebsd_amd64.go
+++ b/vendor/golang.org/x/net/route/zsys_freebsd_amd64.go
@@ -10,6 +10,8 @@ const (
sysAF_LINK = 0x12
sysAF_INET6 = 0x1c
+ sysSOCK_RAW = 0x3
+
sysNET_RT_DUMP = 0x1
sysNET_RT_FLAGS = 0x2
sysNET_RT_IFLIST = 0x3
@@ -114,4 +116,8 @@ const (
sizeofIfDataFreeBSD9Emu = 0x98
sizeofIfDataFreeBSD10Emu = 0x98
sizeofIfDataFreeBSD11Emu = 0x98
+
+ sizeofSockaddrStorage = 0x80
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x1c
)
diff --git a/vendor/golang.org/x/net/route/zsys_freebsd_arm.go b/vendor/golang.org/x/net/route/zsys_freebsd_arm.go
index a034d6fcb..58f8ea16f 100644
--- a/vendor/golang.org/x/net/route/zsys_freebsd_arm.go
+++ b/vendor/golang.org/x/net/route/zsys_freebsd_arm.go
@@ -10,6 +10,8 @@ const (
sysAF_LINK = 0x12
sysAF_INET6 = 0x1c
+ sysSOCK_RAW = 0x3
+
sysNET_RT_DUMP = 0x1
sysNET_RT_FLAGS = 0x2
sysNET_RT_IFLIST = 0x3
@@ -114,4 +116,8 @@ const (
sizeofIfDataFreeBSD9Emu = 0x60
sizeofIfDataFreeBSD10Emu = 0x60
sizeofIfDataFreeBSD11Emu = 0x98
+
+ sizeofSockaddrStorage = 0x80
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x1c
)
diff --git a/vendor/golang.org/x/net/route/zsys_netbsd.go b/vendor/golang.org/x/net/route/zsys_netbsd.go
index aa4aad161..e0df45e8b 100644
--- a/vendor/golang.org/x/net/route/zsys_netbsd.go
+++ b/vendor/golang.org/x/net/route/zsys_netbsd.go
@@ -10,6 +10,8 @@ const (
sysAF_LINK = 0x12
sysAF_INET6 = 0x18
+ sysSOCK_RAW = 0x3
+
sysNET_RT_DUMP = 0x1
sysNET_RT_FLAGS = 0x2
sysNET_RT_IFLIST = 0x5
@@ -88,4 +90,8 @@ const (
sizeofRtMsghdrNetBSD7 = 0x78
sizeofRtMetricsNetBSD7 = 0x50
+
+ sizeofSockaddrStorage = 0x80
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x1c
)
diff --git a/vendor/golang.org/x/net/route/zsys_openbsd.go b/vendor/golang.org/x/net/route/zsys_openbsd.go
index 4fadc4e8f..f5a1ff967 100644
--- a/vendor/golang.org/x/net/route/zsys_openbsd.go
+++ b/vendor/golang.org/x/net/route/zsys_openbsd.go
@@ -10,6 +10,8 @@ const (
sysAF_LINK = 0x12
sysAF_INET6 = 0x18
+ sysSOCK_RAW = 0x3
+
sysNET_RT_DUMP = 0x1
sysNET_RT_FLAGS = 0x2
sysNET_RT_IFLIST = 0x3
@@ -78,3 +80,11 @@ const (
sysRTAX_LABEL = 0xa
sysRTAX_MAX = 0xb
)
+
+const (
+ sizeofRtMsghdr = 0x60
+
+ sizeofSockaddrStorage = 0x100
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x1c
+)
diff --git a/vendor/golang.org/x/net/webdav/internal/xml/marshal.go b/vendor/golang.org/x/net/webdav/internal/xml/marshal.go
index 3c3b6aca5..cb82ec214 100644
--- a/vendor/golang.org/x/net/webdav/internal/xml/marshal.go
+++ b/vendor/golang.org/x/net/webdav/internal/xml/marshal.go
@@ -26,9 +26,9 @@ const (
//
// Marshal handles an array or slice by marshalling each of the elements.
// Marshal handles a pointer by marshalling the value it points at or, if the
-// pointer is nil, by writing nothing. Marshal handles an interface value by
+// pointer is nil, by writing nothing. Marshal handles an interface value by
// marshalling the value it contains or, if the interface value is nil, by
-// writing nothing. Marshal handles all other data by writing one or more XML
+// writing nothing. Marshal handles all other data by writing one or more XML
// elements containing the data.
//
// The name for the XML elements is taken from, in order of preference:
@@ -61,7 +61,7 @@ const (
// value were part of the outer struct.
//
// If a field uses a tag "a>b>c", then the element c will be nested inside
-// parent elements a and b. Fields that appear next to each other that name
+// parent elements a and b. Fields that appear next to each other that name
// the same parent will be enclosed in one XML element.
//
// See MarshalIndent for an example.
@@ -222,7 +222,7 @@ func (enc *Encoder) EncodeToken(t Token) error {
return p.cachedWriteError()
case ProcInst:
// First token to be encoded which is also a ProcInst with target of xml
- // is the xml declaration. The only ProcInst where target of xml is allowed.
+ // is the xml declaration. The only ProcInst where target of xml is allowed.
if t.Target == "xml" && p.Buffered() != 0 {
return fmt.Errorf("xml: EncodeToken of ProcInst xml target only valid for xml declaration, first token encoded")
}
diff --git a/vendor/golang.org/x/net/webdav/internal/xml/read.go b/vendor/golang.org/x/net/webdav/internal/xml/read.go
index 3ece08c49..4089056a1 100644
--- a/vendor/golang.org/x/net/webdav/internal/xml/read.go
+++ b/vendor/golang.org/x/net/webdav/internal/xml/read.go
@@ -27,7 +27,7 @@ import (
// discarded.
//
// Because Unmarshal uses the reflect package, it can only assign
-// to exported (upper case) fields. Unmarshal uses a case-sensitive
+// to exported (upper case) fields. Unmarshal uses a case-sensitive
// comparison to match XML element names to tag values and struct
// field names.
//
@@ -37,7 +37,7 @@ import (
//
// * If the struct has a field of type []byte or string with tag
// ",innerxml", Unmarshal accumulates the raw XML nested inside the
-// element in that field. The rest of the rules still apply.
+// element in that field. The rest of the rules still apply.
//
// * If the struct has a field named XMLName of type xml.Name,
// Unmarshal records the element name in that field.
@@ -59,7 +59,7 @@ import (
//
// * If the XML element contains comments, they are accumulated in
// the first struct field that has tag ",comment". The struct
-// field may have type []byte or string. If there is no such
+// field may have type []byte or string. If there is no such
// field, the comments are discarded.
//
// * If the XML element contains a sub-element whose name matches
@@ -102,7 +102,7 @@ import (
//
// Unmarshal maps an XML element or attribute value to an integer or
// floating-point field by setting the field to the result of
-// interpreting the string value in decimal. There is no check for
+// interpreting the string value in decimal. There is no check for
// overflow.
//
// Unmarshal maps an XML element to an xml.Name by recording the
diff --git a/vendor/golang.org/x/net/webdav/internal/xml/xml.go b/vendor/golang.org/x/net/webdav/internal/xml/xml.go
index ffab4a70c..5b79cbecb 100644
--- a/vendor/golang.org/x/net/webdav/internal/xml/xml.go
+++ b/vendor/golang.org/x/net/webdav/internal/xml/xml.go
@@ -252,7 +252,7 @@ func NewDecoder(r io.Reader) *Decoder {
//
// Slices of bytes in the returned token data refer to the
// parser's internal buffer and remain valid only until the next
-// call to Token. To acquire a copy of the bytes, call CopyToken
+// call to Token. To acquire a copy of the bytes, call CopyToken
// or the token's Copy method.
//
// Token expands self-closing elements such as <br/>
@@ -360,7 +360,7 @@ func (d *Decoder) switchToReader(r io.Reader) {
}
// Parsing state - stack holds old name space translations
-// and the current set of open elements. The translations to pop when
+// and the current set of open elements. The translations to pop when
// ending a given tag are *below* it on the stack, which is
// more work but forced on us by XML.
type stack struct {
@@ -1253,7 +1253,7 @@ func isNameString(s string) bool {
// These tables were generated by cut and paste from Appendix B of
// the XML spec at http://www.xml.com/axml/testaxml.htm
-// and then reformatting. First corresponds to (Letter | '_' | ':')
+// and then reformatting. First corresponds to (Letter | '_' | ':')
// and second corresponds to NameChar.
var first = &unicode.RangeTable{
diff --git a/vendor/golang.org/x/sys/unix/asm.s b/vendor/golang.org/x/sys/unix/asm.s
deleted file mode 100644
index 8ed2fdb94..000000000
--- a/vendor/golang.org/x/sys/unix/asm.s
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright 2014 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build !gccgo
-
-#include "textflag.h"
-
-TEXT ·use(SB),NOSPLIT,$0
- RET
diff --git a/vendor/golang.org/x/sys/unix/mkall.sh b/vendor/golang.org/x/sys/unix/mkall.sh
index 2a1473f16..c1fc2adb8 100755
--- a/vendor/golang.org/x/sys/unix/mkall.sh
+++ b/vendor/golang.org/x/sys/unix/mkall.sh
@@ -89,6 +89,8 @@ case "$1" in
-syscalls)
for i in zsyscall*go
do
+ # Run the command line that appears in the first line
+ # of the generated file to regenerate it.
sed 1q $i | sed 's;^// ;;' | sh > _$i && gofmt < _$i > $i
rm _$i
done
@@ -280,7 +282,7 @@ esac
syscall_goos="syscall_bsd.go $syscall_goos"
;;
esac
- if [ -n "$mksyscall" ]; then echo "$mksyscall $syscall_goos $GOOSARCH_in |gofmt >zsyscall_$GOOSARCH.go"; fi
+ if [ -n "$mksyscall" ]; then echo "$mksyscall -tags $GOOS,$GOARCH $syscall_goos $GOOSARCH_in |gofmt >zsyscall_$GOOSARCH.go"; fi
;;
esac
if [ -n "$mksysctl" ]; then echo "$mksysctl |gofmt >$zsysctl"; fi
diff --git a/vendor/golang.org/x/sys/unix/mkerrors.sh b/vendor/golang.org/x/sys/unix/mkerrors.sh
index 7e6276b9c..8da63576a 100755
--- a/vendor/golang.org/x/sys/unix/mkerrors.sh
+++ b/vendor/golang.org/x/sys/unix/mkerrors.sh
@@ -114,13 +114,16 @@ includes_Linux='
#include <sys/time.h>
#include <sys/socket.h>
#include <linux/if.h>
+#include <linux/if_alg.h>
#include <linux/if_arp.h>
#include <linux/if_ether.h>
#include <linux/if_tun.h>
#include <linux/if_packet.h>
#include <linux/if_addr.h>
+#include <linux/falloc.h>
#include <linux/filter.h>
#include <linux/netlink.h>
+#include <linux/random.h>
#include <linux/reboot.h>
#include <linux/rtnetlink.h>
#include <linux/ptrace.h>
@@ -129,6 +132,7 @@ includes_Linux='
#include <linux/icmpv6.h>
#include <linux/serial.h>
#include <linux/can.h>
+#include <linux/vm_sockets.h>
#include <net/route.h>
#include <asm/termbits.h>
@@ -144,6 +148,10 @@ includes_Linux='
#define PTRACE_SETREGS 0xd
#endif
+#ifndef SOL_NETLINK
+#define SOL_NETLINK 270
+#endif
+
#ifdef SOL_BLUETOOTH
// SPARC includes this in /usr/include/sparc64-linux-gnu/bits/socket.h
// but it is already in bluetooth_linux.go
@@ -312,6 +320,7 @@ ccflags="$@"
$2 ~ /^IN_/ ||
$2 ~ /^LOCK_(SH|EX|NB|UN)$/ ||
$2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|ICMP6|TCP|EVFILT|NOTE|EV|SHUT|PROT|MAP|PACKET|MSG|SCM|MCL|DT|MADV|PR)_/ ||
+ $2 ~ /^FALLOC_/ ||
$2 == "ICMPV6_FILTER" ||
$2 == "SOMAXCONN" ||
$2 == "NAME_MAX" ||
@@ -341,8 +350,13 @@ ccflags="$@"
$2 ~ /^(BPF|DLT)_/ ||
$2 ~ /^CLOCK_/ ||
$2 ~ /^CAN_/ ||
+ $2 ~ /^ALG_/ ||
+ $2 ~ /^GRND_/ ||
+ $2 ~ /^SPLICE_/ ||
+ $2 ~ /^(VM|VMADDR)_/ ||
$2 !~ "WMESGLEN" &&
- $2 ~ /^W[A-Z0-9]+$/ {printf("\t%s = C.%s\n", $2, $2)}
+ $2 ~ /^W[A-Z0-9]+$/ ||
+ $2 ~ /^BLK/ {printf("\t%s = C.%s\n", $2, $2)}
$2 ~ /^__WCOREFLAG$/ {next}
$2 ~ /^__W[A-Z0-9]+$/ {printf("\t%s = C.%s\n", substr($2,3), $2)}
@@ -456,7 +470,7 @@ main(void)
printf("\t%d: \"%s\",\n", e, buf);
}
printf("}\n\n");
-
+
printf("\n\n// Signal table\n");
printf("var signals = [...]string {\n");
qsort(signals, nelem(signals), sizeof signals[0], intcmp);
diff --git a/vendor/golang.org/x/sys/unix/mksyscall.pl b/vendor/golang.org/x/sys/unix/mksyscall.pl
index b1e7766da..34f8ef829 100755
--- a/vendor/golang.org/x/sys/unix/mksyscall.pl
+++ b/vendor/golang.org/x/sys/unix/mksyscall.pl
@@ -29,6 +29,7 @@ my $openbsd = 0;
my $netbsd = 0;
my $dragonfly = 0;
my $arm = 0; # 64-bit value should use (even, odd)-pair
+my $tags = ""; # build tags
if($ARGV[0] eq "-b32") {
$_32bit = "big-endian";
@@ -57,14 +58,14 @@ if($ARGV[0] eq "-arm") {
$arm = 1;
shift;
}
-
-if($ARGV[0] =~ /^-/) {
- print STDERR "usage: mksyscall.pl [-b32 | -l32] [file ...]\n";
- exit 1;
+if($ARGV[0] eq "-tags") {
+ shift;
+ $tags = $ARGV[0];
+ shift;
}
-if($ENV{'GOARCH'} eq "" || $ENV{'GOOS'} eq "") {
- print STDERR "GOARCH or GOOS not defined in environment\n";
+if($ARGV[0] =~ /^-/) {
+ print STDERR "usage: mksyscall.pl [-b32 | -l32] [-tags x,y] [file ...]\n";
exit 1;
}
@@ -132,7 +133,6 @@ while(<>) {
# Prepare arguments to Syscall.
my @args = ();
- my @uses = ();
my $n = 0;
foreach my $p (@in) {
my ($name, $type) = parseparam($p);
@@ -143,14 +143,12 @@ while(<>) {
$text .= "\t_p$n, $errvar = BytePtrFromString($name)\n";
$text .= "\tif $errvar != nil {\n\t\treturn\n\t}\n";
push @args, "uintptr(unsafe.Pointer(_p$n))";
- push @uses, "use(unsafe.Pointer(_p$n))";
$n++;
} elsif($type eq "string") {
print STDERR "$ARGV:$.: $func uses string arguments, but has no error return\n";
$text .= "\tvar _p$n *byte\n";
$text .= "\t_p$n, _ = BytePtrFromString($name)\n";
push @args, "uintptr(unsafe.Pointer(_p$n))";
- push @uses, "use(unsafe.Pointer(_p$n))";
$n++;
} elsif($type =~ /^\[\](.*)/) {
# Convert slice into pointer, length.
@@ -185,7 +183,7 @@ while(<>) {
}
} elsif($type eq "int64" && $_32bit ne "") {
if(@args % 2 && $arm) {
- # arm abi specifies 64-bit argument uses
+ # arm abi specifies 64-bit argument uses
# (even, odd) pair
push @args, "0"
}
@@ -278,11 +276,8 @@ while(<>) {
} else {
$text .= "\t$ret[0], $ret[1], $ret[2] := $call\n";
}
- foreach my $use (@uses) {
- $text .= "\t$use\n";
- }
$text .= $body;
-
+
if ($plan9 && $ret[2] eq "e1") {
$text .= "\tif int32(r0) == -1 {\n";
$text .= "\t\terr = e1\n";
@@ -307,7 +302,7 @@ print <<EOF;
// $cmdline
// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
-// +build $ENV{'GOARCH'},$ENV{'GOOS'}
+// +build $tags
package unix
diff --git a/vendor/golang.org/x/sys/unix/mksyscall_solaris.pl b/vendor/golang.org/x/sys/unix/mksyscall_solaris.pl
index 06bade768..939c8a791 100755
--- a/vendor/golang.org/x/sys/unix/mksyscall_solaris.pl
+++ b/vendor/golang.org/x/sys/unix/mksyscall_solaris.pl
@@ -12,7 +12,7 @@
# * The parameter lists must give a type for each argument:
# the (x, y, z int) shorthand is not allowed.
# * If the return parameter is an error number, it must be named err.
-# * If go func name needs to be different than its libc name,
+# * If go func name needs to be different than its libc name,
# * or the function is not in libc, name could be specified
# * at the end, after "=" sign, like
# //sys getsockopt(s int, level int, name int, val uintptr, vallen *_Socklen) (err error) = libsocket.getsockopt
@@ -22,6 +22,7 @@ use strict;
my $cmdline = "mksyscall_solaris.pl " . join(' ', @ARGV);
my $errors = 0;
my $_32bit = "";
+my $tags = ""; # build tags
binmode STDOUT;
@@ -32,14 +33,14 @@ if($ARGV[0] eq "-b32") {
$_32bit = "little-endian";
shift;
}
-
-if($ARGV[0] =~ /^-/) {
- print STDERR "usage: mksyscall_solaris.pl [-b32 | -l32] [file ...]\n";
- exit 1;
+if($ARGV[0] eq "-tags") {
+ shift;
+ $tags = $ARGV[0];
+ shift;
}
-if($ENV{'GOARCH'} eq "" || $ENV{'GOOS'} eq "") {
- print STDERR "GOARCH or GOOS not defined in environment\n";
+if($ARGV[0] =~ /^-/) {
+ print STDERR "usage: mksyscall_solaris.pl [-b32 | -l32] [-tags x,y] [file ...]\n";
exit 1;
}
@@ -138,7 +139,6 @@ while(<>) {
# Prepare arguments to Syscall.
my @args = ();
- my @uses = ();
my $n = 0;
foreach my $p (@in) {
my ($name, $type) = parseparam($p);
@@ -149,14 +149,12 @@ while(<>) {
$text .= "\t_p$n, $errvar = $strconvfunc($name)\n";
$text .= "\tif $errvar != nil {\n\t\treturn\n\t}\n";
push @args, "uintptr(unsafe.Pointer(_p$n))";
- push @uses, "use(unsafe.Pointer(_p$n))";
$n++;
} elsif($type eq "string") {
print STDERR "$ARGV:$.: $func uses string arguments, but has no error return\n";
$text .= "\tvar _p$n $strconvtype\n";
$text .= "\t_p$n, _ = $strconvfunc($name)\n";
push @args, "uintptr(unsafe.Pointer(_p$n))";
- push @uses, "use(unsafe.Pointer(_p$n))";
$n++;
} elsif($type =~ /^\[\](.*)/) {
# Convert slice into pointer, length.
@@ -243,9 +241,6 @@ while(<>) {
} else {
$text .= "\t$ret[0], $ret[1], $ret[2] := $call\n";
}
- foreach my $use (@uses) {
- $text .= "\t$use\n";
- }
$text .= $body;
if ($do_errno) {
@@ -265,7 +260,7 @@ print <<EOF;
// $cmdline
// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
-// +build $ENV{'GOARCH'},$ENV{'GOOS'}
+// +build $tags
package $package
diff --git a/vendor/golang.org/x/sys/unix/mksysnum_linux.pl b/vendor/golang.org/x/sys/unix/mksysnum_linux.pl
index 52b16139e..872ae8c52 100755
--- a/vendor/golang.org/x/sys/unix/mksysnum_linux.pl
+++ b/vendor/golang.org/x/sys/unix/mksysnum_linux.pl
@@ -38,15 +38,22 @@ sub fmt {
}
my $prev;
-open(GCC, "gcc -E -dD $ARGV[0] |") || die "can't run gcc";
+open(GCC, "gcc -E -dD @ARGV |") || die "can't run gcc";
while(<GCC>){
if(/^#define __NR_Linux\s+([0-9]+)/){
# mips/mips64: extract offset
$offset = $1;
}
+ elsif(/^#define __NR(\w*)_SYSCALL_BASE\s+([0-9]+)/){
+ # arm: extract offset
+ $offset = $1;
+ }
elsif(/^#define __NR_syscalls\s+/) {
# ignore redefinitions of __NR_syscalls
}
+ elsif(/^#define __NR_(\w*)Linux_syscalls\s+/) {
+ # mips/mips64: ignore definitions about the number of syscalls
+ }
elsif(/^#define __NR_(\w+)\s+([0-9]+)/){
$prev = $2;
fmt($1, $2);
@@ -61,6 +68,9 @@ while(<GCC>){
elsif(/^#define __NR_(\w+)\s+\(__NR_Linux \+ ([0-9]+)/){
fmt($1, $2);
}
+ elsif(/^#define __NR_(\w+)\s+\(__NR_SYSCALL_BASE \+ ([0-9]+)/){
+ fmt($1, $2);
+ }
}
print <<EOF;
diff --git a/vendor/golang.org/x/sys/unix/syscall.go b/vendor/golang.org/x/sys/unix/syscall.go
index a0bcf842c..85e35020e 100644
--- a/vendor/golang.org/x/sys/unix/syscall.go
+++ b/vendor/golang.org/x/sys/unix/syscall.go
@@ -21,8 +21,6 @@
// holds a value of type syscall.Errno.
package unix // import "golang.org/x/sys/unix"
-import "unsafe"
-
// ByteSliceFromString returns a NUL-terminated slice of bytes
// containing the text of s. If s contains a NUL byte at any
// location, it returns (nil, EINVAL).
@@ -69,8 +67,3 @@ func (tv *Timeval) Nano() int64 {
}
func TimevalToNsec(tv Timeval) int64 { return int64(tv.Sec)*1e9 + int64(tv.Usec)*1e3 }
-
-// use is a no-op, but the compiler cannot see that it is.
-// Calling use(p) ensures that p is kept live until that point.
-//go:noescape
-func use(p unsafe.Pointer)
diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.go b/vendor/golang.org/x/sys/unix/syscall_darwin.go
index 3d534d2da..0d1771c3f 100644
--- a/vendor/golang.org/x/sys/unix/syscall_darwin.go
+++ b/vendor/golang.org/x/sys/unix/syscall_darwin.go
@@ -144,7 +144,6 @@ func getAttrList(path string, attrList attrList, attrBuf []byte, options uint) (
uintptr(options),
0,
)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
return nil, e1
}
@@ -197,7 +196,6 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf))
}
r0, _, e1 := Syscall(SYS_GETFSSTAT64, uintptr(_p0), bufsize, uintptr(flags))
- use(unsafe.Pointer(_p0))
n = int(r0)
if e1 != 0 {
err = e1
diff --git a/vendor/golang.org/x/sys/unix/syscall_dragonfly.go b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go
index ec408ee78..fbbe0dce2 100644
--- a/vendor/golang.org/x/sys/unix/syscall_dragonfly.go
+++ b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go
@@ -109,7 +109,6 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf))
}
r0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(_p0), bufsize, uintptr(flags))
- use(unsafe.Pointer(_p0))
n = int(r0)
if e1 != 0 {
err = e1
diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd.go b/vendor/golang.org/x/sys/unix/syscall_freebsd.go
index 520ccbeaf..ec56ed608 100644
--- a/vendor/golang.org/x/sys/unix/syscall_freebsd.go
+++ b/vendor/golang.org/x/sys/unix/syscall_freebsd.go
@@ -129,7 +129,6 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf))
}
r0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(_p0), bufsize, uintptr(flags))
- use(unsafe.Pointer(_p0))
n = int(r0)
if e1 != 0 {
err = e1
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux.go b/vendor/golang.org/x/sys/unix/syscall_linux.go
index 01c569ad5..1ff45e9f6 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux.go
@@ -452,6 +452,127 @@ func (sa *SockaddrCAN) sockaddr() (unsafe.Pointer, _Socklen, error) {
return unsafe.Pointer(&sa.raw), SizeofSockaddrCAN, nil
}
+// SockaddrALG implements the Sockaddr interface for AF_ALG type sockets.
+// SockaddrALG enables userspace access to the Linux kernel's cryptography
+// subsystem. The Type and Name fields specify which type of hash or cipher
+// should be used with a given socket.
+//
+// To create a file descriptor that provides access to a hash or cipher, both
+// Bind and Accept must be used. Once the setup process is complete, input
+// data can be written to the socket, processed by the kernel, and then read
+// back as hash output or ciphertext.
+//
+// Here is an example of using an AF_ALG socket with SHA1 hashing.
+// The initial socket setup process is as follows:
+//
+// // Open a socket to perform SHA1 hashing.
+// fd, _ := unix.Socket(unix.AF_ALG, unix.SOCK_SEQPACKET, 0)
+// addr := &unix.SockaddrALG{Type: "hash", Name: "sha1"}
+// unix.Bind(fd, addr)
+// // Note: unix.Accept does not work at this time; must invoke accept()
+// // manually using unix.Syscall.
+// hashfd, _, _ := unix.Syscall(unix.SYS_ACCEPT, uintptr(fd), 0, 0)
+//
+// Once a file descriptor has been returned from Accept, it may be used to
+// perform SHA1 hashing. The descriptor is not safe for concurrent use, but
+// may be re-used repeatedly with subsequent Write and Read operations.
+//
+// When hashing a small byte slice or string, a single Write and Read may
+// be used:
+//
+// // Assume hashfd is already configured using the setup process.
+// hash := os.NewFile(hashfd, "sha1")
+// // Hash an input string and read the results. Each Write discards
+// // previous hash state. Read always reads the current state.
+// b := make([]byte, 20)
+// for i := 0; i < 2; i++ {
+// io.WriteString(hash, "Hello, world.")
+// hash.Read(b)
+// fmt.Println(hex.EncodeToString(b))
+// }
+// // Output:
+// // 2ae01472317d1935a84797ec1983ae243fc6aa28
+// // 2ae01472317d1935a84797ec1983ae243fc6aa28
+//
+// For hashing larger byte slices, or byte streams such as those read from
+// a file or socket, use Sendto with MSG_MORE to instruct the kernel to update
+// the hash digest instead of creating a new one for a given chunk and finalizing it.
+//
+// // Assume hashfd and addr are already configured using the setup process.
+// hash := os.NewFile(hashfd, "sha1")
+// // Hash the contents of a file.
+// f, _ := os.Open("/tmp/linux-4.10-rc7.tar.xz")
+// b := make([]byte, 4096)
+// for {
+// n, err := f.Read(b)
+// if err == io.EOF {
+// break
+// }
+// unix.Sendto(hashfd, b[:n], unix.MSG_MORE, addr)
+// }
+// hash.Read(b)
+// fmt.Println(hex.EncodeToString(b))
+// // Output: 85cdcad0c06eef66f805ecce353bec9accbeecc5
+//
+// For more information, see: http://www.chronox.de/crypto-API/crypto/userspace-if.html.
+type SockaddrALG struct {
+ Type string
+ Name string
+ Feature uint32
+ Mask uint32
+ raw RawSockaddrALG
+}
+
+func (sa *SockaddrALG) sockaddr() (unsafe.Pointer, _Socklen, error) {
+ // Leave room for NUL byte terminator.
+ if len(sa.Type) > 13 {
+ return nil, 0, EINVAL
+ }
+ if len(sa.Name) > 63 {
+ return nil, 0, EINVAL
+ }
+
+ sa.raw.Family = AF_ALG
+ sa.raw.Feat = sa.Feature
+ sa.raw.Mask = sa.Mask
+
+ typ, err := ByteSliceFromString(sa.Type)
+ if err != nil {
+ return nil, 0, err
+ }
+ name, err := ByteSliceFromString(sa.Name)
+ if err != nil {
+ return nil, 0, err
+ }
+
+ copy(sa.raw.Type[:], typ)
+ copy(sa.raw.Name[:], name)
+
+ return unsafe.Pointer(&sa.raw), SizeofSockaddrALG, nil
+}
+
+// SockaddrVM implements the Sockaddr interface for AF_VSOCK type sockets.
+// SockaddrVM provides access to Linux VM sockets: a mechanism that enables
+// bidirectional communication between a hypervisor and its guest virtual
+// machines.
+type SockaddrVM struct {
+ // CID and Port specify a context ID and port address for a VM socket.
+ // Guests have a unique CID, and hosts may have a well-known CID of:
+ // - VMADDR_CID_HYPERVISOR: refers to the hypervisor process.
+ // - VMADDR_CID_HOST: refers to other processes on the host.
+ CID uint32
+ Port uint32
+ raw RawSockaddrVM
+}
+
+func (sa *SockaddrVM) sockaddr() (unsafe.Pointer, _Socklen, error) {
+ sa.raw.Family = AF_VSOCK
+ sa.raw.Port = sa.Port
+ sa.raw.Cid = sa.CID
+
+ return unsafe.Pointer(&sa.raw), SizeofSockaddrVM, nil
+}
+
func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) {
switch rsa.Addr.Family {
case AF_NETLINK:
@@ -521,6 +642,14 @@ func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) {
sa.Addr[i] = pp.Addr[i]
}
return sa, nil
+
+ case AF_VSOCK:
+ pp := (*RawSockaddrVM)(unsafe.Pointer(rsa))
+ sa := &SockaddrVM{
+ CID: pp.Cid,
+ Port: pp.Port,
+ }
+ return sa, nil
}
return nil, EAFNOSUPPORT
}
@@ -939,6 +1068,7 @@ func Getpgrp() (pid int) {
//sysnb Getpid() (pid int)
//sysnb Getppid() (ppid int)
//sys Getpriority(which int, who int) (prio int, err error)
+//sys Getrandom(buf []byte, flags int) (n int, err error)
//sysnb Getrusage(who int, rusage *Rusage) (err error)
//sysnb Getsid(pid int) (sid int, err error)
//sysnb Gettid() (tid int)
@@ -1019,6 +1149,25 @@ func Munmap(b []byte) (err error) {
//sys Mlockall(flags int) (err error)
//sys Munlockall() (err error)
+// Vmsplice splices user pages from a slice of Iovecs into a pipe specified by fd,
+// using the specified flags.
+func Vmsplice(fd int, iovs []Iovec, flags int) (int, error) {
+ n, _, errno := Syscall6(
+ SYS_VMSPLICE,
+ uintptr(fd),
+ uintptr(unsafe.Pointer(&iovs[0])),
+ uintptr(len(iovs)),
+ uintptr(flags),
+ 0,
+ 0,
+ )
+ if errno != 0 {
+ return 0, syscall.Errno(errno)
+ }
+
+ return int(n), nil
+}
+
/*
* Unimplemented
*/
@@ -1146,7 +1295,6 @@ func Munmap(b []byte) (err error) {
// Utimensat
// Vfork
// Vhangup
-// Vmsplice
// Vserver
// Waitid
// _Sysctl
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go b/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go
index 5ed801369..be77d24a4 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go
@@ -73,7 +73,6 @@ func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr,
func Fstatfs(fd int, buf *Statfs_t) (err error) {
_, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))
- use(unsafe.Pointer(buf))
if e != 0 {
err = errnoErr(e)
}
@@ -86,7 +85,6 @@ func Statfs(path string, buf *Statfs_t) (err error) {
return err
}
_, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(p)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))
- use(unsafe.Pointer(p))
if e != 0 {
err = errnoErr(e)
}
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go b/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go
index 81c5f4732..1708a4bbf 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go
@@ -132,7 +132,6 @@ func (cmsg *Cmsghdr) SetLen(length int) {
func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {
mmap_args := [6]uintptr{addr, length, uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)}
r0, _, e1 := Syscall(SYS_MMAP, uintptr(unsafe.Pointer(&mmap_args[0])), 0, 0)
- use(unsafe.Pointer(&mmap_args[0]))
xaddr = uintptr(r0)
if e1 != 0 {
err = errnoErr(e1)
diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd.go b/vendor/golang.org/x/sys/unix/syscall_openbsd.go
index 554a82342..246131d2a 100644
--- a/vendor/golang.org/x/sys/unix/syscall_openbsd.go
+++ b/vendor/golang.org/x/sys/unix/syscall_openbsd.go
@@ -111,7 +111,6 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf))
}
r0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(_p0), bufsize, uintptr(flags))
- use(unsafe.Pointer(_p0))
n = int(r0)
if e1 != 0 {
err = e1
diff --git a/vendor/golang.org/x/sys/unix/types_linux.go b/vendor/golang.org/x/sys/unix/types_linux.go
index f3d8f90ee..ae79779ed 100644
--- a/vendor/golang.org/x/sys/unix/types_linux.go
+++ b/vendor/golang.org/x/sys/unix/types_linux.go
@@ -59,6 +59,8 @@ package unix
#include <bluetooth/bluetooth.h>
#include <bluetooth/hci.h>
#include <linux/can.h>
+#include <linux/if_alg.h>
+#include <linux/vm_sockets.h>
#ifdef TCSETS2
// On systems that have "struct termios2" use this as type Termios.
@@ -221,6 +223,10 @@ type RawSockaddrHCI C.struct_sockaddr_hci
type RawSockaddrCAN C.struct_sockaddr_can
+type RawSockaddrALG C.struct_sockaddr_alg
+
+type RawSockaddrVM C.struct_sockaddr_vm
+
type RawSockaddr C.struct_sockaddr
type RawSockaddrAny C.struct_sockaddr_any
@@ -262,6 +268,8 @@ const (
SizeofSockaddrNetlink = C.sizeof_struct_sockaddr_nl
SizeofSockaddrHCI = C.sizeof_struct_sockaddr_hci
SizeofSockaddrCAN = C.sizeof_struct_sockaddr_can
+ SizeofSockaddrALG = C.sizeof_struct_sockaddr_alg
+ SizeofSockaddrVM = C.sizeof_struct_sockaddr_vm
SizeofLinger = C.sizeof_struct_linger
SizeofIPMreq = C.sizeof_struct_ip_mreq
SizeofIPMreqn = C.sizeof_struct_ip_mreqn
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go
index b40d0299b..2d02caf0e 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go
@@ -51,8 +51,16 @@ const (
AF_TIPC = 0x1e
AF_UNIX = 0x1
AF_UNSPEC = 0x0
+ AF_VSOCK = 0x28
AF_WANPIPE = 0x19
AF_X25 = 0x9
+ ALG_OP_DECRYPT = 0x0
+ ALG_OP_ENCRYPT = 0x1
+ ALG_SET_AEAD_ASSOCLEN = 0x4
+ ALG_SET_AEAD_AUTHSIZE = 0x5
+ ALG_SET_IV = 0x2
+ ALG_SET_KEY = 0x1
+ ALG_SET_OP = 0x3
ARPHRD_ADAPT = 0x108
ARPHRD_APPLETLK = 0x8
ARPHRD_ARCNET = 0x7
@@ -145,6 +153,21 @@ const (
B75 = 0x2
B921600 = 0x1007
B9600 = 0xd
+ BLKBSZGET = 0x80041270
+ BLKBSZSET = 0x40041271
+ BLKFLSBUF = 0x1261
+ BLKFRAGET = 0x1265
+ BLKFRASET = 0x1264
+ BLKGETSIZE = 0x1260
+ BLKGETSIZE64 = 0x80041272
+ BLKRAGET = 0x1263
+ BLKRASET = 0x1262
+ BLKROGET = 0x125e
+ BLKROSET = 0x125d
+ BLKRRPART = 0x125f
+ BLKSECTGET = 0x1267
+ BLKSECTSET = 0x1266
+ BLKSSZGET = 0x1268
BOTHER = 0x1000
BPF_A = 0x10
BPF_ABS = 0x20
@@ -385,6 +408,12 @@ const (
EXTA = 0xe
EXTB = 0xf
EXTPROC = 0x10000
+ FALLOC_FL_COLLAPSE_RANGE = 0x8
+ FALLOC_FL_INSERT_RANGE = 0x20
+ FALLOC_FL_KEEP_SIZE = 0x1
+ FALLOC_FL_NO_HIDE_STALE = 0x4
+ FALLOC_FL_PUNCH_HOLE = 0x2
+ FALLOC_FL_ZERO_RANGE = 0x10
FD_CLOEXEC = 0x1
FD_SETSIZE = 0x400
FF0 = 0x0
@@ -424,6 +453,8 @@ const (
F_ULOCK = 0x0
F_UNLCK = 0x2
F_WRLCK = 0x1
+ GRND_NONBLOCK = 0x1
+ GRND_RANDOM = 0x2
HUPCL = 0x400
IBSHIFT = 0x10
ICANON = 0x2
@@ -808,6 +839,7 @@ const (
NLM_F_ATOMIC = 0x400
NLM_F_CREATE = 0x400
NLM_F_DUMP = 0x300
+ NLM_F_DUMP_FILTERED = 0x20
NLM_F_DUMP_INTR = 0x10
NLM_F_ECHO = 0x8
NLM_F_EXCL = 0x200
@@ -1247,6 +1279,7 @@ const (
SOL_IP = 0x0
SOL_IPV6 = 0x29
SOL_IRDA = 0x10a
+ SOL_NETLINK = 0x10e
SOL_PACKET = 0x107
SOL_RAW = 0xff
SOL_SOCKET = 0x1
@@ -1292,6 +1325,17 @@ const (
SO_TIMESTAMPING = 0x25
SO_TIMESTAMPNS = 0x23
SO_TYPE = 0x3
+ SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
+ SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1
+ SO_VM_SOCKETS_BUFFER_SIZE = 0x0
+ SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6
+ SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7
+ SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3
+ SO_VM_SOCKETS_TRUSTED = 0x5
+ SPLICE_F_GIFT = 0x8
+ SPLICE_F_MORE = 0x4
+ SPLICE_F_MOVE = 0x1
+ SPLICE_F_NONBLOCK = 0x2
S_BLKSIZE = 0x200
S_IEXEC = 0x40
S_IFBLK = 0x6000
@@ -1464,6 +1508,11 @@ const (
VINTR = 0x0
VKILL = 0x3
VLNEXT = 0xf
+ VMADDR_CID_ANY = 0xffffffff
+ VMADDR_CID_HOST = 0x2
+ VMADDR_CID_HYPERVISOR = 0x0
+ VMADDR_CID_RESERVED = 0x1
+ VMADDR_PORT_ANY = 0xffffffff
VMIN = 0x6
VQUIT = 0x1
VREPRINT = 0xc
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go
index 9f0600ccb..f21dcd9dc 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go
@@ -51,8 +51,16 @@ const (
AF_TIPC = 0x1e
AF_UNIX = 0x1
AF_UNSPEC = 0x0
+ AF_VSOCK = 0x28
AF_WANPIPE = 0x19
AF_X25 = 0x9
+ ALG_OP_DECRYPT = 0x0
+ ALG_OP_ENCRYPT = 0x1
+ ALG_SET_AEAD_ASSOCLEN = 0x4
+ ALG_SET_AEAD_AUTHSIZE = 0x5
+ ALG_SET_IV = 0x2
+ ALG_SET_KEY = 0x1
+ ALG_SET_OP = 0x3
ARPHRD_ADAPT = 0x108
ARPHRD_APPLETLK = 0x8
ARPHRD_ARCNET = 0x7
@@ -145,6 +153,21 @@ const (
B75 = 0x2
B921600 = 0x1007
B9600 = 0xd
+ BLKBSZGET = 0x80081270
+ BLKBSZSET = 0x40081271
+ BLKFLSBUF = 0x1261
+ BLKFRAGET = 0x1265
+ BLKFRASET = 0x1264
+ BLKGETSIZE = 0x1260
+ BLKGETSIZE64 = 0x80081272
+ BLKRAGET = 0x1263
+ BLKRASET = 0x1262
+ BLKROGET = 0x125e
+ BLKROSET = 0x125d
+ BLKRRPART = 0x125f
+ BLKSECTGET = 0x1267
+ BLKSECTSET = 0x1266
+ BLKSSZGET = 0x1268
BOTHER = 0x1000
BPF_A = 0x10
BPF_ABS = 0x20
@@ -385,6 +408,12 @@ const (
EXTA = 0xe
EXTB = 0xf
EXTPROC = 0x10000
+ FALLOC_FL_COLLAPSE_RANGE = 0x8
+ FALLOC_FL_INSERT_RANGE = 0x20
+ FALLOC_FL_KEEP_SIZE = 0x1
+ FALLOC_FL_NO_HIDE_STALE = 0x4
+ FALLOC_FL_PUNCH_HOLE = 0x2
+ FALLOC_FL_ZERO_RANGE = 0x10
FD_CLOEXEC = 0x1
FD_SETSIZE = 0x400
FF0 = 0x0
@@ -424,6 +453,8 @@ const (
F_ULOCK = 0x0
F_UNLCK = 0x2
F_WRLCK = 0x1
+ GRND_NONBLOCK = 0x1
+ GRND_RANDOM = 0x2
HUPCL = 0x400
IBSHIFT = 0x10
ICANON = 0x2
@@ -766,6 +797,7 @@ const (
NETLINK_ADD_MEMBERSHIP = 0x1
NETLINK_AUDIT = 0x9
NETLINK_BROADCAST_ERROR = 0x4
+ NETLINK_CAP_ACK = 0xa
NETLINK_CONNECTOR = 0xb
NETLINK_CRYPTO = 0x15
NETLINK_DNRTMSG = 0xe
@@ -778,14 +810,19 @@ const (
NETLINK_IP6_FW = 0xd
NETLINK_ISCSI = 0x8
NETLINK_KOBJECT_UEVENT = 0xf
+ NETLINK_LISTEN_ALL_NSID = 0x8
+ NETLINK_LIST_MEMBERSHIPS = 0x9
NETLINK_NETFILTER = 0xc
NETLINK_NFLOG = 0x5
NETLINK_NO_ENOBUFS = 0x5
NETLINK_PKTINFO = 0x3
NETLINK_RDMA = 0x14
NETLINK_ROUTE = 0x0
+ NETLINK_RX_RING = 0x6
NETLINK_SCSITRANSPORT = 0x12
NETLINK_SELINUX = 0x7
+ NETLINK_SOCK_DIAG = 0x4
+ NETLINK_TX_RING = 0x7
NETLINK_UNUSED = 0x1
NETLINK_USERSOCK = 0x2
NETLINK_XFRM = 0x6
@@ -808,6 +845,7 @@ const (
NLM_F_ATOMIC = 0x400
NLM_F_CREATE = 0x400
NLM_F_DUMP = 0x300
+ NLM_F_DUMP_FILTERED = 0x20
NLM_F_DUMP_INTR = 0x10
NLM_F_ECHO = 0x8
NLM_F_EXCL = 0x200
@@ -1248,6 +1286,7 @@ const (
SOL_IP = 0x0
SOL_IPV6 = 0x29
SOL_IRDA = 0x10a
+ SOL_NETLINK = 0x10e
SOL_PACKET = 0x107
SOL_RAW = 0xff
SOL_SOCKET = 0x1
@@ -1293,6 +1332,17 @@ const (
SO_TIMESTAMPING = 0x25
SO_TIMESTAMPNS = 0x23
SO_TYPE = 0x3
+ SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
+ SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1
+ SO_VM_SOCKETS_BUFFER_SIZE = 0x0
+ SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6
+ SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7
+ SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3
+ SO_VM_SOCKETS_TRUSTED = 0x5
+ SPLICE_F_GIFT = 0x8
+ SPLICE_F_MORE = 0x4
+ SPLICE_F_MOVE = 0x1
+ SPLICE_F_NONBLOCK = 0x2
S_BLKSIZE = 0x200
S_IEXEC = 0x40
S_IFBLK = 0x6000
@@ -1465,7 +1515,13 @@ const (
VINTR = 0x0
VKILL = 0x3
VLNEXT = 0xf
+ VMADDR_CID_ANY = 0xffffffff
+ VMADDR_CID_HOST = 0x2
+ VMADDR_CID_HYPERVISOR = 0x0
+ VMADDR_CID_RESERVED = 0x1
+ VMADDR_PORT_ANY = 0xffffffff
VMIN = 0x6
+ VM_SOCKETS_INVALID_VERSION = 0xffffffff
VQUIT = 0x1
VREPRINT = 0xc
VSTART = 0x8
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go
index 647a796e3..7889e6477 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go
@@ -50,8 +50,16 @@ const (
AF_TIPC = 0x1e
AF_UNIX = 0x1
AF_UNSPEC = 0x0
+ AF_VSOCK = 0x28
AF_WANPIPE = 0x19
AF_X25 = 0x9
+ ALG_OP_DECRYPT = 0x0
+ ALG_OP_ENCRYPT = 0x1
+ ALG_SET_AEAD_ASSOCLEN = 0x4
+ ALG_SET_AEAD_AUTHSIZE = 0x5
+ ALG_SET_IV = 0x2
+ ALG_SET_KEY = 0x1
+ ALG_SET_OP = 0x3
ARPHRD_ADAPT = 0x108
ARPHRD_APPLETLK = 0x8
ARPHRD_ARCNET = 0x7
@@ -141,6 +149,21 @@ const (
B75 = 0x2
B921600 = 0x1007
B9600 = 0xd
+ BLKBSZGET = 0x80081270
+ BLKBSZSET = 0x40081271
+ BLKFLSBUF = 0x1261
+ BLKFRAGET = 0x1265
+ BLKFRASET = 0x1264
+ BLKGETSIZE = 0x1260
+ BLKGETSIZE64 = 0x80081272
+ BLKRAGET = 0x1263
+ BLKRASET = 0x1262
+ BLKROGET = 0x125e
+ BLKROSET = 0x125d
+ BLKRRPART = 0x125f
+ BLKSECTGET = 0x1267
+ BLKSECTSET = 0x1266
+ BLKSSZGET = 0x1268
BOTHER = 0x1000
BPF_A = 0x10
BPF_ABS = 0x20
@@ -370,6 +393,12 @@ const (
EXTA = 0xe
EXTB = 0xf
EXTPROC = 0x10000
+ FALLOC_FL_COLLAPSE_RANGE = 0x8
+ FALLOC_FL_INSERT_RANGE = 0x20
+ FALLOC_FL_KEEP_SIZE = 0x1
+ FALLOC_FL_NO_HIDE_STALE = 0x4
+ FALLOC_FL_PUNCH_HOLE = 0x2
+ FALLOC_FL_ZERO_RANGE = 0x10
FD_CLOEXEC = 0x1
FD_SETSIZE = 0x400
FF0 = 0x0
@@ -409,6 +438,8 @@ const (
F_ULOCK = 0x0
F_UNLCK = 0x2
F_WRLCK = 0x1
+ GRND_NONBLOCK = 0x1
+ GRND_RANDOM = 0x2
HUPCL = 0x400
IBSHIFT = 0x10
ICANON = 0x2
@@ -726,6 +757,7 @@ const (
NETLINK_AUDIT = 0x9
NETLINK_BROADCAST_ERROR = 0x4
NETLINK_CONNECTOR = 0xb
+ NETLINK_CRYPTO = 0x15
NETLINK_DNRTMSG = 0xe
NETLINK_DROP_MEMBERSHIP = 0x2
NETLINK_ECRYPTFS = 0x13
@@ -742,8 +774,11 @@ const (
NETLINK_PKTINFO = 0x3
NETLINK_RDMA = 0x14
NETLINK_ROUTE = 0x0
+ NETLINK_RX_RING = 0x6
NETLINK_SCSITRANSPORT = 0x12
NETLINK_SELINUX = 0x7
+ NETLINK_SOCK_DIAG = 0x4
+ NETLINK_TX_RING = 0x7
NETLINK_UNUSED = 0x1
NETLINK_USERSOCK = 0x2
NETLINK_XFRM = 0x6
@@ -766,6 +801,7 @@ const (
NLM_F_ATOMIC = 0x400
NLM_F_CREATE = 0x400
NLM_F_DUMP = 0x300
+ NLM_F_DUMP_FILTERED = 0x20
NLM_F_ECHO = 0x8
NLM_F_EXCL = 0x200
NLM_F_MATCH = 0x200
@@ -1171,6 +1207,7 @@ const (
SOL_IP = 0x0
SOL_IPV6 = 0x29
SOL_IRDA = 0x10a
+ SOL_NETLINK = 0x10e
SOL_PACKET = 0x107
SOL_RAW = 0xff
SOL_SOCKET = 0x1
@@ -1216,6 +1253,17 @@ const (
SO_TIMESTAMPING = 0x25
SO_TIMESTAMPNS = 0x23
SO_TYPE = 0x3
+ SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
+ SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1
+ SO_VM_SOCKETS_BUFFER_SIZE = 0x0
+ SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6
+ SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7
+ SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3
+ SO_VM_SOCKETS_TRUSTED = 0x5
+ SPLICE_F_GIFT = 0x8
+ SPLICE_F_MORE = 0x4
+ SPLICE_F_MOVE = 0x1
+ SPLICE_F_NONBLOCK = 0x2
S_BLKSIZE = 0x200
S_IEXEC = 0x40
S_IFBLK = 0x6000
@@ -1388,6 +1436,11 @@ const (
VINTR = 0x0
VKILL = 0x3
VLNEXT = 0xf
+ VMADDR_CID_ANY = 0xffffffff
+ VMADDR_CID_HOST = 0x2
+ VMADDR_CID_HYPERVISOR = 0x0
+ VMADDR_CID_RESERVED = 0x1
+ VMADDR_PORT_ANY = 0xffffffff
VMIN = 0x6
VQUIT = 0x1
VREPRINT = 0xc
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go
index a6d1e1fa3..16a18f595 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go
@@ -54,6 +54,13 @@ const (
AF_VSOCK = 0x28
AF_WANPIPE = 0x19
AF_X25 = 0x9
+ ALG_OP_DECRYPT = 0x0
+ ALG_OP_ENCRYPT = 0x1
+ ALG_SET_AEAD_ASSOCLEN = 0x4
+ ALG_SET_AEAD_AUTHSIZE = 0x5
+ ALG_SET_IV = 0x2
+ ALG_SET_KEY = 0x1
+ ALG_SET_OP = 0x3
ARPHRD_ADAPT = 0x108
ARPHRD_APPLETLK = 0x8
ARPHRD_ARCNET = 0x7
@@ -149,6 +156,21 @@ const (
B75 = 0x2
B921600 = 0x1007
B9600 = 0xd
+ BLKBSZGET = 0x80081270
+ BLKBSZSET = 0x40081271
+ BLKFLSBUF = 0x1261
+ BLKFRAGET = 0x1265
+ BLKFRASET = 0x1264
+ BLKGETSIZE = 0x1260
+ BLKGETSIZE64 = 0x80081272
+ BLKRAGET = 0x1263
+ BLKRASET = 0x1262
+ BLKROGET = 0x125e
+ BLKROSET = 0x125d
+ BLKRRPART = 0x125f
+ BLKSECTGET = 0x1267
+ BLKSECTSET = 0x1266
+ BLKSSZGET = 0x1268
BOTHER = 0x1000
BPF_A = 0x10
BPF_ABS = 0x20
@@ -399,6 +421,12 @@ const (
EXTA = 0xe
EXTB = 0xf
EXTPROC = 0x10000
+ FALLOC_FL_COLLAPSE_RANGE = 0x8
+ FALLOC_FL_INSERT_RANGE = 0x20
+ FALLOC_FL_KEEP_SIZE = 0x1
+ FALLOC_FL_NO_HIDE_STALE = 0x4
+ FALLOC_FL_PUNCH_HOLE = 0x2
+ FALLOC_FL_ZERO_RANGE = 0x10
FD_CLOEXEC = 0x1
FD_SETSIZE = 0x400
FF0 = 0x0
@@ -438,6 +466,8 @@ const (
F_ULOCK = 0x0
F_UNLCK = 0x2
F_WRLCK = 0x1
+ GRND_NONBLOCK = 0x1
+ GRND_RANDOM = 0x2
HUPCL = 0x400
IBSHIFT = 0x10
ICANON = 0x2
@@ -795,6 +825,7 @@ const (
NETLINK_ADD_MEMBERSHIP = 0x1
NETLINK_AUDIT = 0x9
NETLINK_BROADCAST_ERROR = 0x4
+ NETLINK_CAP_ACK = 0xa
NETLINK_CONNECTOR = 0xb
NETLINK_CRYPTO = 0x15
NETLINK_DNRTMSG = 0xe
@@ -807,6 +838,8 @@ const (
NETLINK_IP6_FW = 0xd
NETLINK_ISCSI = 0x8
NETLINK_KOBJECT_UEVENT = 0xf
+ NETLINK_LISTEN_ALL_NSID = 0x8
+ NETLINK_LIST_MEMBERSHIPS = 0x9
NETLINK_NETFILTER = 0xc
NETLINK_NFLOG = 0x5
NETLINK_NO_ENOBUFS = 0x5
@@ -840,6 +873,7 @@ const (
NLM_F_ATOMIC = 0x400
NLM_F_CREATE = 0x400
NLM_F_DUMP = 0x300
+ NLM_F_DUMP_FILTERED = 0x20
NLM_F_DUMP_INTR = 0x10
NLM_F_ECHO = 0x8
NLM_F_EXCL = 0x200
@@ -1294,6 +1328,7 @@ const (
SOL_IP = 0x0
SOL_IPV6 = 0x29
SOL_IRDA = 0x10a
+ SOL_NETLINK = 0x10e
SOL_PACKET = 0x107
SOL_RAW = 0xff
SOL_SOCKET = 0x1
@@ -1347,7 +1382,18 @@ const (
SO_TIMESTAMPING = 0x25
SO_TIMESTAMPNS = 0x23
SO_TYPE = 0x3
+ SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
+ SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1
+ SO_VM_SOCKETS_BUFFER_SIZE = 0x0
+ SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6
+ SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7
+ SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3
+ SO_VM_SOCKETS_TRUSTED = 0x5
SO_WIFI_STATUS = 0x29
+ SPLICE_F_GIFT = 0x8
+ SPLICE_F_MORE = 0x4
+ SPLICE_F_MOVE = 0x1
+ SPLICE_F_NONBLOCK = 0x2
S_BLKSIZE = 0x200
S_IEXEC = 0x40
S_IFBLK = 0x6000
@@ -1542,6 +1588,11 @@ const (
VINTR = 0x0
VKILL = 0x3
VLNEXT = 0xf
+ VMADDR_CID_ANY = 0xffffffff
+ VMADDR_CID_HOST = 0x2
+ VMADDR_CID_HYPERVISOR = 0x0
+ VMADDR_CID_RESERVED = 0x1
+ VMADDR_PORT_ANY = 0xffffffff
VMIN = 0x6
VQUIT = 0x1
VREPRINT = 0xc
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go
index e4fb9ad57..80e69e4cb 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go
@@ -50,8 +50,16 @@ const (
AF_TIPC = 0x1e
AF_UNIX = 0x1
AF_UNSPEC = 0x0
+ AF_VSOCK = 0x28
AF_WANPIPE = 0x19
AF_X25 = 0x9
+ ALG_OP_DECRYPT = 0x0
+ ALG_OP_ENCRYPT = 0x1
+ ALG_SET_AEAD_ASSOCLEN = 0x4
+ ALG_SET_AEAD_AUTHSIZE = 0x5
+ ALG_SET_IV = 0x2
+ ALG_SET_KEY = 0x1
+ ALG_SET_OP = 0x3
ARPHRD_ADAPT = 0x108
ARPHRD_APPLETLK = 0x8
ARPHRD_ARCNET = 0x7
@@ -144,6 +152,21 @@ const (
B75 = 0x2
B921600 = 0x1007
B9600 = 0xd
+ BLKBSZGET = 0x80081270
+ BLKBSZSET = 0x40081271
+ BLKFLSBUF = 0x1261
+ BLKFRAGET = 0x1265
+ BLKFRASET = 0x1264
+ BLKGETSIZE = 0x1260
+ BLKGETSIZE64 = 0x80081272
+ BLKRAGET = 0x1263
+ BLKRASET = 0x1262
+ BLKROGET = 0x125e
+ BLKROSET = 0x125d
+ BLKRRPART = 0x125f
+ BLKSECTGET = 0x1267
+ BLKSECTSET = 0x1266
+ BLKSSZGET = 0x1268
BOTHER = 0x1000
BPF_A = 0x10
BPF_ABS = 0x20
@@ -375,6 +398,12 @@ const (
EXTA = 0xe
EXTB = 0xf
EXTPROC = 0x10000
+ FALLOC_FL_COLLAPSE_RANGE = 0x8
+ FALLOC_FL_INSERT_RANGE = 0x20
+ FALLOC_FL_KEEP_SIZE = 0x1
+ FALLOC_FL_NO_HIDE_STALE = 0x4
+ FALLOC_FL_PUNCH_HOLE = 0x2
+ FALLOC_FL_ZERO_RANGE = 0x10
FD_CLOEXEC = 0x1
FD_SETSIZE = 0x400
FF0 = 0x0
@@ -414,6 +443,8 @@ const (
F_ULOCK = 0x0
F_UNLCK = 0x2
F_WRLCK = 0x1
+ GRND_NONBLOCK = 0x1
+ GRND_RANDOM = 0x2
HUPCL = 0x400
IBSHIFT = 0x10
ICANON = 0x2
@@ -753,6 +784,7 @@ const (
NETLINK_ADD_MEMBERSHIP = 0x1
NETLINK_AUDIT = 0x9
NETLINK_BROADCAST_ERROR = 0x4
+ NETLINK_CAP_ACK = 0xa
NETLINK_CONNECTOR = 0xb
NETLINK_CRYPTO = 0x15
NETLINK_DNRTMSG = 0xe
@@ -765,14 +797,19 @@ const (
NETLINK_IP6_FW = 0xd
NETLINK_ISCSI = 0x8
NETLINK_KOBJECT_UEVENT = 0xf
+ NETLINK_LISTEN_ALL_NSID = 0x8
+ NETLINK_LIST_MEMBERSHIPS = 0x9
NETLINK_NETFILTER = 0xc
NETLINK_NFLOG = 0x5
NETLINK_NO_ENOBUFS = 0x5
NETLINK_PKTINFO = 0x3
NETLINK_RDMA = 0x14
NETLINK_ROUTE = 0x0
+ NETLINK_RX_RING = 0x6
NETLINK_SCSITRANSPORT = 0x12
NETLINK_SELINUX = 0x7
+ NETLINK_SOCK_DIAG = 0x4
+ NETLINK_TX_RING = 0x7
NETLINK_UNUSED = 0x1
NETLINK_USERSOCK = 0x2
NETLINK_XFRM = 0x6
@@ -795,6 +832,7 @@ const (
NLM_F_ATOMIC = 0x400
NLM_F_CREATE = 0x400
NLM_F_DUMP = 0x300
+ NLM_F_DUMP_FILTERED = 0x20
NLM_F_DUMP_INTR = 0x10
NLM_F_ECHO = 0x8
NLM_F_EXCL = 0x200
@@ -1221,6 +1259,7 @@ const (
SOL_IP = 0x0
SOL_IPV6 = 0x29
SOL_IRDA = 0x10a
+ SOL_NETLINK = 0x10e
SOL_PACKET = 0x107
SOL_RAW = 0xff
SOL_SOCKET = 0xffff
@@ -1267,6 +1306,17 @@ const (
SO_TIMESTAMPING = 0x25
SO_TIMESTAMPNS = 0x23
SO_TYPE = 0x1008
+ SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
+ SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1
+ SO_VM_SOCKETS_BUFFER_SIZE = 0x0
+ SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6
+ SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7
+ SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3
+ SO_VM_SOCKETS_TRUSTED = 0x5
+ SPLICE_F_GIFT = 0x8
+ SPLICE_F_MORE = 0x4
+ SPLICE_F_MOVE = 0x1
+ SPLICE_F_NONBLOCK = 0x2
S_BLKSIZE = 0x200
S_IEXEC = 0x40
S_IFBLK = 0x6000
@@ -1435,6 +1485,11 @@ const (
VINTR = 0x0
VKILL = 0x3
VLNEXT = 0xf
+ VMADDR_CID_ANY = 0xffffffff
+ VMADDR_CID_HOST = 0x2
+ VMADDR_CID_HYPERVISOR = 0x0
+ VMADDR_CID_RESERVED = 0x1
+ VMADDR_PORT_ANY = 0xffffffff
VMIN = 0x4
VQUIT = 0x1
VREPRINT = 0xc
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go
index 36535b242..9c91dbf60 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go
@@ -56,6 +56,13 @@ const (
AF_VSOCK = 0x28
AF_WANPIPE = 0x19
AF_X25 = 0x9
+ ALG_OP_DECRYPT = 0x0
+ ALG_OP_ENCRYPT = 0x1
+ ALG_SET_AEAD_ASSOCLEN = 0x4
+ ALG_SET_AEAD_AUTHSIZE = 0x5
+ ALG_SET_IV = 0x2
+ ALG_SET_KEY = 0x1
+ ALG_SET_OP = 0x3
ARPHRD_6LOWPAN = 0x339
ARPHRD_ADAPT = 0x108
ARPHRD_APPLETLK = 0x8
@@ -152,6 +159,21 @@ const (
B75 = 0x2
B921600 = 0x1007
B9600 = 0xd
+ BLKBSZGET = 0x80081270
+ BLKBSZSET = 0x40081271
+ BLKFLSBUF = 0x1261
+ BLKFRAGET = 0x1265
+ BLKFRASET = 0x1264
+ BLKGETSIZE = 0x1260
+ BLKGETSIZE64 = 0x80081272
+ BLKRAGET = 0x1263
+ BLKRASET = 0x1262
+ BLKROGET = 0x125e
+ BLKROSET = 0x125d
+ BLKRRPART = 0x125f
+ BLKSECTGET = 0x1267
+ BLKSECTSET = 0x1266
+ BLKSSZGET = 0x1268
BPF_A = 0x10
BPF_ABS = 0x20
BPF_ADD = 0x0
@@ -374,6 +396,12 @@ const (
EXTA = 0xe
EXTB = 0xf
EXTPROC = 0x10000
+ FALLOC_FL_COLLAPSE_RANGE = 0x8
+ FALLOC_FL_INSERT_RANGE = 0x20
+ FALLOC_FL_KEEP_SIZE = 0x1
+ FALLOC_FL_NO_HIDE_STALE = 0x4
+ FALLOC_FL_PUNCH_HOLE = 0x2
+ FALLOC_FL_ZERO_RANGE = 0x10
FD_CLOEXEC = 0x1
FD_SETSIZE = 0x400
FLUSHO = 0x2000
@@ -413,6 +441,8 @@ const (
F_ULOCK = 0x0
F_UNLCK = 0x2
F_WRLCK = 0x1
+ GRND_NONBLOCK = 0x1
+ GRND_RANDOM = 0x2
HUPCL = 0x400
ICANON = 0x2
ICMPV6_FILTER = 0x1
@@ -806,6 +836,7 @@ const (
NLM_F_ATOMIC = 0x400
NLM_F_CREATE = 0x400
NLM_F_DUMP = 0x300
+ NLM_F_DUMP_FILTERED = 0x20
NLM_F_DUMP_INTR = 0x10
NLM_F_ECHO = 0x8
NLM_F_EXCL = 0x200
@@ -1304,6 +1335,7 @@ const (
SOL_IP = 0x0
SOL_IPV6 = 0x29
SOL_IRDA = 0x10a
+ SOL_NETLINK = 0x10e
SOL_PACKET = 0x107
SOL_RAW = 0xff
SOL_SOCKET = 0xffff
@@ -1362,7 +1394,18 @@ const (
SO_TIMESTAMPING = 0x25
SO_TIMESTAMPNS = 0x23
SO_TYPE = 0x1008
+ SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
+ SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1
+ SO_VM_SOCKETS_BUFFER_SIZE = 0x0
+ SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6
+ SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7
+ SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3
+ SO_VM_SOCKETS_TRUSTED = 0x5
SO_WIFI_STATUS = 0x29
+ SPLICE_F_GIFT = 0x8
+ SPLICE_F_MORE = 0x4
+ SPLICE_F_MOVE = 0x1
+ SPLICE_F_NONBLOCK = 0x2
S_BLKSIZE = 0x200
S_IEXEC = 0x40
S_IFBLK = 0x6000
@@ -1540,6 +1583,11 @@ const (
VINTR = 0x0
VKILL = 0x3
VLNEXT = 0xf
+ VMADDR_CID_ANY = 0xffffffff
+ VMADDR_CID_HOST = 0x2
+ VMADDR_CID_HYPERVISOR = 0x0
+ VMADDR_CID_RESERVED = 0x1
+ VMADDR_PORT_ANY = 0xffffffff
VMIN = 0x4
VQUIT = 0x1
VREPRINT = 0xc
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go
index 112f05de5..fb15b41ed 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go
@@ -56,6 +56,13 @@ const (
AF_VSOCK = 0x28
AF_WANPIPE = 0x19
AF_X25 = 0x9
+ ALG_OP_DECRYPT = 0x0
+ ALG_OP_ENCRYPT = 0x1
+ ALG_SET_AEAD_ASSOCLEN = 0x4
+ ALG_SET_AEAD_AUTHSIZE = 0x5
+ ALG_SET_IV = 0x2
+ ALG_SET_KEY = 0x1
+ ALG_SET_OP = 0x3
ARPHRD_6LOWPAN = 0x339
ARPHRD_ADAPT = 0x108
ARPHRD_APPLETLK = 0x8
@@ -152,6 +159,21 @@ const (
B75 = 0x2
B921600 = 0x1007
B9600 = 0xd
+ BLKBSZGET = 0x80081270
+ BLKBSZSET = 0x40081271
+ BLKFLSBUF = 0x1261
+ BLKFRAGET = 0x1265
+ BLKFRASET = 0x1264
+ BLKGETSIZE = 0x1260
+ BLKGETSIZE64 = 0x80081272
+ BLKRAGET = 0x1263
+ BLKRASET = 0x1262
+ BLKROGET = 0x125e
+ BLKROSET = 0x125d
+ BLKRRPART = 0x125f
+ BLKSECTGET = 0x1267
+ BLKSECTSET = 0x1266
+ BLKSSZGET = 0x1268
BPF_A = 0x10
BPF_ABS = 0x20
BPF_ADD = 0x0
@@ -374,6 +396,12 @@ const (
EXTA = 0xe
EXTB = 0xf
EXTPROC = 0x10000
+ FALLOC_FL_COLLAPSE_RANGE = 0x8
+ FALLOC_FL_INSERT_RANGE = 0x20
+ FALLOC_FL_KEEP_SIZE = 0x1
+ FALLOC_FL_NO_HIDE_STALE = 0x4
+ FALLOC_FL_PUNCH_HOLE = 0x2
+ FALLOC_FL_ZERO_RANGE = 0x10
FD_CLOEXEC = 0x1
FD_SETSIZE = 0x400
FLUSHO = 0x2000
@@ -413,6 +441,8 @@ const (
F_ULOCK = 0x0
F_UNLCK = 0x2
F_WRLCK = 0x1
+ GRND_NONBLOCK = 0x1
+ GRND_RANDOM = 0x2
HUPCL = 0x400
ICANON = 0x2
ICMPV6_FILTER = 0x1
@@ -806,6 +836,7 @@ const (
NLM_F_ATOMIC = 0x400
NLM_F_CREATE = 0x400
NLM_F_DUMP = 0x300
+ NLM_F_DUMP_FILTERED = 0x20
NLM_F_DUMP_INTR = 0x10
NLM_F_ECHO = 0x8
NLM_F_EXCL = 0x200
@@ -1304,6 +1335,7 @@ const (
SOL_IP = 0x0
SOL_IPV6 = 0x29
SOL_IRDA = 0x10a
+ SOL_NETLINK = 0x10e
SOL_PACKET = 0x107
SOL_RAW = 0xff
SOL_SOCKET = 0xffff
@@ -1362,7 +1394,18 @@ const (
SO_TIMESTAMPING = 0x25
SO_TIMESTAMPNS = 0x23
SO_TYPE = 0x1008
+ SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
+ SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1
+ SO_VM_SOCKETS_BUFFER_SIZE = 0x0
+ SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6
+ SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7
+ SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3
+ SO_VM_SOCKETS_TRUSTED = 0x5
SO_WIFI_STATUS = 0x29
+ SPLICE_F_GIFT = 0x8
+ SPLICE_F_MORE = 0x4
+ SPLICE_F_MOVE = 0x1
+ SPLICE_F_NONBLOCK = 0x2
S_BLKSIZE = 0x200
S_IEXEC = 0x40
S_IFBLK = 0x6000
@@ -1540,6 +1583,11 @@ const (
VINTR = 0x0
VKILL = 0x3
VLNEXT = 0xf
+ VMADDR_CID_ANY = 0xffffffff
+ VMADDR_CID_HOST = 0x2
+ VMADDR_CID_HYPERVISOR = 0x0
+ VMADDR_CID_RESERVED = 0x1
+ VMADDR_PORT_ANY = 0xffffffff
VMIN = 0x4
VQUIT = 0x1
VREPRINT = 0xc
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go
index 0f5ee2237..9a3a73766 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go
@@ -57,6 +57,13 @@ const (
AF_VSOCK = 0x28
AF_WANPIPE = 0x19
AF_X25 = 0x9
+ ALG_OP_DECRYPT = 0x0
+ ALG_OP_ENCRYPT = 0x1
+ ALG_SET_AEAD_ASSOCLEN = 0x4
+ ALG_SET_AEAD_AUTHSIZE = 0x5
+ ALG_SET_IV = 0x2
+ ALG_SET_KEY = 0x1
+ ALG_SET_OP = 0x3
ARPHRD_6LOWPAN = 0x339
ARPHRD_ADAPT = 0x108
ARPHRD_APPLETLK = 0x8
@@ -153,6 +160,21 @@ const (
B75 = 0x2
B921600 = 0x1007
B9600 = 0xd
+ BLKBSZGET = 0x80081270
+ BLKBSZSET = 0x40081271
+ BLKFLSBUF = 0x1261
+ BLKFRAGET = 0x1265
+ BLKFRASET = 0x1264
+ BLKGETSIZE = 0x1260
+ BLKGETSIZE64 = 0x80081272
+ BLKRAGET = 0x1263
+ BLKRASET = 0x1262
+ BLKROGET = 0x125e
+ BLKROSET = 0x125d
+ BLKRRPART = 0x125f
+ BLKSECTGET = 0x1267
+ BLKSECTSET = 0x1266
+ BLKSSZGET = 0x1268
BOTHER = 0x1000
BPF_A = 0x10
BPF_ABS = 0x20
@@ -411,6 +433,12 @@ const (
EXTA = 0xe
EXTB = 0xf
EXTPROC = 0x10000
+ FALLOC_FL_COLLAPSE_RANGE = 0x8
+ FALLOC_FL_INSERT_RANGE = 0x20
+ FALLOC_FL_KEEP_SIZE = 0x1
+ FALLOC_FL_NO_HIDE_STALE = 0x4
+ FALLOC_FL_PUNCH_HOLE = 0x2
+ FALLOC_FL_ZERO_RANGE = 0x10
FD_CLOEXEC = 0x1
FD_SETSIZE = 0x400
FF0 = 0x0
@@ -453,6 +481,8 @@ const (
F_ULOCK = 0x0
F_UNLCK = 0x2
F_WRLCK = 0x1
+ GRND_NONBLOCK = 0x1
+ GRND_RANDOM = 0x2
HUPCL = 0x400
IBSHIFT = 0x10
ICANON = 0x2
@@ -1437,7 +1467,18 @@ const (
SO_TIMESTAMPING = 0x25
SO_TIMESTAMPNS = 0x23
SO_TYPE = 0x1008
+ SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
+ SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1
+ SO_VM_SOCKETS_BUFFER_SIZE = 0x0
+ SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6
+ SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7
+ SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3
+ SO_VM_SOCKETS_TRUSTED = 0x5
SO_WIFI_STATUS = 0x29
+ SPLICE_F_GIFT = 0x8
+ SPLICE_F_MORE = 0x4
+ SPLICE_F_MOVE = 0x1
+ SPLICE_F_NONBLOCK = 0x2
S_BLKSIZE = 0x200
S_IEXEC = 0x40
S_IFBLK = 0x6000
@@ -1641,6 +1682,11 @@ const (
VINTR = 0x0
VKILL = 0x3
VLNEXT = 0xf
+ VMADDR_CID_ANY = 0xffffffff
+ VMADDR_CID_HOST = 0x2
+ VMADDR_CID_HYPERVISOR = 0x0
+ VMADDR_CID_RESERVED = 0x1
+ VMADDR_PORT_ANY = 0xffffffff
VMIN = 0x4
VQUIT = 0x1
VREPRINT = 0xc
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go
index 4e4193951..4d602e6d2 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go
@@ -54,6 +54,13 @@ const (
AF_VSOCK = 0x28
AF_WANPIPE = 0x19
AF_X25 = 0x9
+ ALG_OP_DECRYPT = 0x0
+ ALG_OP_ENCRYPT = 0x1
+ ALG_SET_AEAD_ASSOCLEN = 0x4
+ ALG_SET_AEAD_AUTHSIZE = 0x5
+ ALG_SET_IV = 0x2
+ ALG_SET_KEY = 0x1
+ ALG_SET_OP = 0x3
ARPHRD_6LOWPAN = 0x339
ARPHRD_ADAPT = 0x108
ARPHRD_APPLETLK = 0x8
@@ -150,6 +157,21 @@ const (
B75 = 0x2
B921600 = 0x16
B9600 = 0xd
+ BLKBSZGET = 0x80081270
+ BLKBSZSET = 0x40081271
+ BLKFLSBUF = 0x1261
+ BLKFRAGET = 0x1265
+ BLKFRASET = 0x1264
+ BLKGETSIZE = 0x1260
+ BLKGETSIZE64 = 0x80081272
+ BLKRAGET = 0x1263
+ BLKRASET = 0x1262
+ BLKROGET = 0x125e
+ BLKROSET = 0x125d
+ BLKRRPART = 0x125f
+ BLKSECTGET = 0x1267
+ BLKSECTSET = 0x1266
+ BLKSSZGET = 0x1268
BOTHER = 0x1f
BPF_A = 0x10
BPF_ABS = 0x20
@@ -401,6 +423,12 @@ const (
EXTA = 0xe
EXTB = 0xf
EXTPROC = 0x10000000
+ FALLOC_FL_COLLAPSE_RANGE = 0x8
+ FALLOC_FL_INSERT_RANGE = 0x20
+ FALLOC_FL_KEEP_SIZE = 0x1
+ FALLOC_FL_NO_HIDE_STALE = 0x4
+ FALLOC_FL_PUNCH_HOLE = 0x2
+ FALLOC_FL_ZERO_RANGE = 0x10
FD_CLOEXEC = 0x1
FD_SETSIZE = 0x400
FF0 = 0x0
@@ -443,6 +471,8 @@ const (
F_ULOCK = 0x0
F_UNLCK = 0x2
F_WRLCK = 0x1
+ GRND_NONBLOCK = 0x1
+ GRND_RANDOM = 0x2
HUPCL = 0x4000
IBSHIFT = 0x10
ICANON = 0x100
@@ -785,6 +815,7 @@ const (
NETLINK_ADD_MEMBERSHIP = 0x1
NETLINK_AUDIT = 0x9
NETLINK_BROADCAST_ERROR = 0x4
+ NETLINK_CAP_ACK = 0xa
NETLINK_CONNECTOR = 0xb
NETLINK_CRYPTO = 0x15
NETLINK_DNRTMSG = 0xe
@@ -797,6 +828,8 @@ const (
NETLINK_IP6_FW = 0xd
NETLINK_ISCSI = 0x8
NETLINK_KOBJECT_UEVENT = 0xf
+ NETLINK_LISTEN_ALL_NSID = 0x8
+ NETLINK_LIST_MEMBERSHIPS = 0x9
NETLINK_NETFILTER = 0xc
NETLINK_NFLOG = 0x5
NETLINK_NO_ENOBUFS = 0x5
@@ -832,6 +865,7 @@ const (
NLM_F_ATOMIC = 0x400
NLM_F_CREATE = 0x400
NLM_F_DUMP = 0x300
+ NLM_F_DUMP_FILTERED = 0x20
NLM_F_DUMP_INTR = 0x10
NLM_F_ECHO = 0x8
NLM_F_EXCL = 0x200
@@ -1361,6 +1395,7 @@ const (
SOL_IP = 0x0
SOL_IPV6 = 0x29
SOL_IRDA = 0x10a
+ SOL_NETLINK = 0x10e
SOL_PACKET = 0x107
SOL_RAW = 0xff
SOL_SOCKET = 0x1
@@ -1415,7 +1450,18 @@ const (
SO_TIMESTAMPING = 0x25
SO_TIMESTAMPNS = 0x23
SO_TYPE = 0x3
+ SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
+ SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1
+ SO_VM_SOCKETS_BUFFER_SIZE = 0x0
+ SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6
+ SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7
+ SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3
+ SO_VM_SOCKETS_TRUSTED = 0x5
SO_WIFI_STATUS = 0x29
+ SPLICE_F_GIFT = 0x8
+ SPLICE_F_MORE = 0x4
+ SPLICE_F_MOVE = 0x1
+ SPLICE_F_NONBLOCK = 0x2
S_BLKSIZE = 0x200
S_IEXEC = 0x40
S_IFBLK = 0x6000
@@ -1614,6 +1660,11 @@ const (
VINTR = 0x0
VKILL = 0x3
VLNEXT = 0xf
+ VMADDR_CID_ANY = 0xffffffff
+ VMADDR_CID_HOST = 0x2
+ VMADDR_CID_HYPERVISOR = 0x0
+ VMADDR_CID_RESERVED = 0x1
+ VMADDR_PORT_ANY = 0xffffffff
VMIN = 0x5
VQUIT = 0x1
VREPRINT = 0xb
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go
index 407e6b539..5280d9e8c 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go
@@ -54,6 +54,13 @@ const (
AF_VSOCK = 0x28
AF_WANPIPE = 0x19
AF_X25 = 0x9
+ ALG_OP_DECRYPT = 0x0
+ ALG_OP_ENCRYPT = 0x1
+ ALG_SET_AEAD_ASSOCLEN = 0x4
+ ALG_SET_AEAD_AUTHSIZE = 0x5
+ ALG_SET_IV = 0x2
+ ALG_SET_KEY = 0x1
+ ALG_SET_OP = 0x3
ARPHRD_ADAPT = 0x108
ARPHRD_APPLETLK = 0x8
ARPHRD_ARCNET = 0x7
@@ -149,6 +156,21 @@ const (
B75 = 0x2
B921600 = 0x16
B9600 = 0xd
+ BLKBSZGET = 0x80081270
+ BLKBSZSET = 0x40081271
+ BLKFLSBUF = 0x1261
+ BLKFRAGET = 0x1265
+ BLKFRASET = 0x1264
+ BLKGETSIZE = 0x1260
+ BLKGETSIZE64 = 0x80081272
+ BLKRAGET = 0x1263
+ BLKRASET = 0x1262
+ BLKROGET = 0x125e
+ BLKROSET = 0x125d
+ BLKRRPART = 0x125f
+ BLKSECTGET = 0x1267
+ BLKSECTSET = 0x1266
+ BLKSSZGET = 0x1268
BOTHER = 0x1f
BPF_A = 0x10
BPF_ABS = 0x20
@@ -397,6 +419,12 @@ const (
EXTA = 0xe
EXTB = 0xf
EXTPROC = 0x10000000
+ FALLOC_FL_COLLAPSE_RANGE = 0x8
+ FALLOC_FL_INSERT_RANGE = 0x20
+ FALLOC_FL_KEEP_SIZE = 0x1
+ FALLOC_FL_NO_HIDE_STALE = 0x4
+ FALLOC_FL_PUNCH_HOLE = 0x2
+ FALLOC_FL_ZERO_RANGE = 0x10
FD_CLOEXEC = 0x1
FD_SETSIZE = 0x400
FF0 = 0x0
@@ -436,6 +464,8 @@ const (
F_ULOCK = 0x0
F_UNLCK = 0x2
F_WRLCK = 0x1
+ GRND_NONBLOCK = 0x1
+ GRND_RANDOM = 0x2
HUPCL = 0x4000
IBSHIFT = 0x10
ICANON = 0x100
@@ -840,6 +870,7 @@ const (
NLM_F_ATOMIC = 0x400
NLM_F_CREATE = 0x400
NLM_F_DUMP = 0x300
+ NLM_F_DUMP_FILTERED = 0x20
NLM_F_DUMP_INTR = 0x10
NLM_F_ECHO = 0x8
NLM_F_EXCL = 0x200
@@ -1361,6 +1392,7 @@ const (
SOL_IP = 0x0
SOL_IPV6 = 0x29
SOL_IRDA = 0x10a
+ SOL_NETLINK = 0x10e
SOL_PACKET = 0x107
SOL_RAW = 0xff
SOL_SOCKET = 0x1
@@ -1414,7 +1446,18 @@ const (
SO_TIMESTAMPING = 0x25
SO_TIMESTAMPNS = 0x23
SO_TYPE = 0x3
+ SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
+ SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1
+ SO_VM_SOCKETS_BUFFER_SIZE = 0x0
+ SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6
+ SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7
+ SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3
+ SO_VM_SOCKETS_TRUSTED = 0x5
SO_WIFI_STATUS = 0x29
+ SPLICE_F_GIFT = 0x8
+ SPLICE_F_MORE = 0x4
+ SPLICE_F_MOVE = 0x1
+ SPLICE_F_NONBLOCK = 0x2
S_BLKSIZE = 0x200
S_IEXEC = 0x40
S_IFBLK = 0x6000
@@ -1613,6 +1656,11 @@ const (
VINTR = 0x0
VKILL = 0x3
VLNEXT = 0xf
+ VMADDR_CID_ANY = 0xffffffff
+ VMADDR_CID_HOST = 0x2
+ VMADDR_CID_HYPERVISOR = 0x0
+ VMADDR_CID_RESERVED = 0x1
+ VMADDR_PORT_ANY = 0xffffffff
VMIN = 0x5
VQUIT = 0x1
VREPRINT = 0xb
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go
index 40c9b8793..81ad7a876 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go
@@ -56,6 +56,13 @@ const (
AF_VSOCK = 0x28
AF_WANPIPE = 0x19
AF_X25 = 0x9
+ ALG_OP_DECRYPT = 0x0
+ ALG_OP_ENCRYPT = 0x1
+ ALG_SET_AEAD_ASSOCLEN = 0x4
+ ALG_SET_AEAD_AUTHSIZE = 0x5
+ ALG_SET_IV = 0x2
+ ALG_SET_KEY = 0x1
+ ALG_SET_OP = 0x3
ARPHRD_6LOWPAN = 0x339
ARPHRD_ADAPT = 0x108
ARPHRD_APPLETLK = 0x8
@@ -152,6 +159,21 @@ const (
B75 = 0x2
B921600 = 0x1007
B9600 = 0xd
+ BLKBSZGET = 0x80081270
+ BLKBSZSET = 0x40081271
+ BLKFLSBUF = 0x1261
+ BLKFRAGET = 0x1265
+ BLKFRASET = 0x1264
+ BLKGETSIZE = 0x1260
+ BLKGETSIZE64 = 0x80081272
+ BLKRAGET = 0x1263
+ BLKRASET = 0x1262
+ BLKROGET = 0x125e
+ BLKROSET = 0x125d
+ BLKRRPART = 0x125f
+ BLKSECTGET = 0x1267
+ BLKSECTSET = 0x1266
+ BLKSSZGET = 0x1268
BOTHER = 0x1000
BPF_A = 0x10
BPF_ABS = 0x20
@@ -407,6 +429,12 @@ const (
EXTA = 0xe
EXTB = 0xf
EXTPROC = 0x10000
+ FALLOC_FL_COLLAPSE_RANGE = 0x8
+ FALLOC_FL_INSERT_RANGE = 0x20
+ FALLOC_FL_KEEP_SIZE = 0x1
+ FALLOC_FL_NO_HIDE_STALE = 0x4
+ FALLOC_FL_PUNCH_HOLE = 0x2
+ FALLOC_FL_ZERO_RANGE = 0x10
FD_CLOEXEC = 0x1
FD_SETSIZE = 0x400
FF0 = 0x0
@@ -449,6 +477,8 @@ const (
F_ULOCK = 0x0
F_UNLCK = 0x2
F_WRLCK = 0x1
+ GRND_NONBLOCK = 0x1
+ GRND_RANDOM = 0x2
HUPCL = 0x400
IBSHIFT = 0x10
ICANON = 0x2
@@ -1412,6 +1442,7 @@ const (
SOL_IP = 0x0
SOL_IPV6 = 0x29
SOL_IRDA = 0x10a
+ SOL_NETLINK = 0x10e
SOL_PACKET = 0x107
SOL_RAW = 0xff
SOL_SOCKET = 0x1
@@ -1469,7 +1500,18 @@ const (
SO_TIMESTAMPING = 0x25
SO_TIMESTAMPNS = 0x23
SO_TYPE = 0x3
+ SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
+ SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1
+ SO_VM_SOCKETS_BUFFER_SIZE = 0x0
+ SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6
+ SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7
+ SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3
+ SO_VM_SOCKETS_TRUSTED = 0x5
SO_WIFI_STATUS = 0x29
+ SPLICE_F_GIFT = 0x8
+ SPLICE_F_MORE = 0x4
+ SPLICE_F_MOVE = 0x1
+ SPLICE_F_NONBLOCK = 0x2
S_BLKSIZE = 0x200
S_IEXEC = 0x40
S_IFBLK = 0x6000
@@ -1672,6 +1714,11 @@ const (
VINTR = 0x0
VKILL = 0x3
VLNEXT = 0xf
+ VMADDR_CID_ANY = 0xffffffff
+ VMADDR_CID_HOST = 0x2
+ VMADDR_CID_HYPERVISOR = 0x0
+ VMADDR_CID_RESERVED = 0x1
+ VMADDR_PORT_ANY = 0xffffffff
VMIN = 0x6
VQUIT = 0x1
VREPRINT = 0xc
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go
index 62680ed8a..95de199fc 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go
@@ -57,6 +57,13 @@ const (
AF_VSOCK = 0x28
AF_WANPIPE = 0x19
AF_X25 = 0x9
+ ALG_OP_DECRYPT = 0x0
+ ALG_OP_ENCRYPT = 0x1
+ ALG_SET_AEAD_ASSOCLEN = 0x4
+ ALG_SET_AEAD_AUTHSIZE = 0x5
+ ALG_SET_IV = 0x2
+ ALG_SET_KEY = 0x1
+ ALG_SET_OP = 0x3
ARPHRD_6LOWPAN = 0x339
ARPHRD_ADAPT = 0x108
ARPHRD_APPLETLK = 0x8
@@ -156,6 +163,21 @@ const (
B76800 = 0x1005
B921600 = 0x1009
B9600 = 0xd
+ BLKBSZGET = 0x80081270
+ BLKBSZSET = 0x40081271
+ BLKFLSBUF = 0x1261
+ BLKFRAGET = 0x1265
+ BLKFRASET = 0x1264
+ BLKGETSIZE = 0x1260
+ BLKGETSIZE64 = 0x80081272
+ BLKRAGET = 0x1263
+ BLKRASET = 0x1262
+ BLKROGET = 0x125e
+ BLKROSET = 0x125d
+ BLKRRPART = 0x125f
+ BLKSECTGET = 0x1267
+ BLKSECTSET = 0x1266
+ BLKSSZGET = 0x1268
BOTHER = 0x1000
BPF_A = 0x10
BPF_ABS = 0x20
@@ -415,6 +437,12 @@ const (
EXTA = 0xe
EXTB = 0xf
EXTPROC = 0x10000
+ FALLOC_FL_COLLAPSE_RANGE = 0x8
+ FALLOC_FL_INSERT_RANGE = 0x20
+ FALLOC_FL_KEEP_SIZE = 0x1
+ FALLOC_FL_NO_HIDE_STALE = 0x4
+ FALLOC_FL_PUNCH_HOLE = 0x2
+ FALLOC_FL_ZERO_RANGE = 0x10
FD_CLOEXEC = 0x1
FD_SETSIZE = 0x400
FF0 = 0x0
@@ -457,6 +485,8 @@ const (
F_ULOCK = 0x0
F_UNLCK = 0x3
F_WRLCK = 0x2
+ GRND_NONBLOCK = 0x1
+ GRND_RANDOM = 0x2
HUPCL = 0x400
IBSHIFT = 0x10
ICANON = 0x2
@@ -1510,7 +1540,18 @@ const (
SO_TIMESTAMPING = 0x23
SO_TIMESTAMPNS = 0x21
SO_TYPE = 0x1008
+ SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
+ SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1
+ SO_VM_SOCKETS_BUFFER_SIZE = 0x0
+ SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6
+ SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7
+ SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3
+ SO_VM_SOCKETS_TRUSTED = 0x5
SO_WIFI_STATUS = 0x25
+ SPLICE_F_GIFT = 0x8
+ SPLICE_F_MORE = 0x4
+ SPLICE_F_MOVE = 0x1
+ SPLICE_F_NONBLOCK = 0x2
S_BLKSIZE = 0x200
S_IEXEC = 0x40
S_IFBLK = 0x6000
@@ -1715,6 +1756,11 @@ const (
VINTR = 0x0
VKILL = 0x3
VLNEXT = 0xf
+ VMADDR_CID_ANY = 0xffffffff
+ VMADDR_CID_HOST = 0x2
+ VMADDR_CID_HYPERVISOR = 0x0
+ VMADDR_CID_RESERVED = 0x1
+ VMADDR_PORT_ANY = 0xffffffff
VMIN = 0x4
VQUIT = 0x1
VREPRINT = 0xc
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go
index 031034a34..e48f4a5c1 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go
@@ -1,7 +1,7 @@
-// mksyscall.pl -l32 syscall_bsd.go syscall_darwin.go syscall_darwin_386.go
+// mksyscall.pl -l32 -tags darwin,386 syscall_bsd.go syscall_darwin.go syscall_darwin_386.go
// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
-// +build 386,darwin
+// +build darwin,386
package unix
@@ -222,7 +222,6 @@ func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr)
_p0 = unsafe.Pointer(&_zero)
}
_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
- use(_p0)
if e1 != 0 {
err = errnoErr(e1)
}
@@ -238,7 +237,6 @@ func utimes(path string, timeval *[2]Timeval) (err error) {
return
}
_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -307,7 +305,6 @@ func Access(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -333,7 +330,6 @@ func Chdir(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -349,7 +345,6 @@ func Chflags(path string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -365,7 +360,6 @@ func Chmod(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -381,7 +375,6 @@ func Chown(path string, uid int, gid int) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -397,7 +390,6 @@ func Chroot(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -449,8 +441,6 @@ func Exchangedata(path1 string, path2 string, options int) (err error) {
return
}
_, _, e1 := Syscall(SYS_EXCHANGEDATA, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -727,7 +717,6 @@ func Lchown(path string, uid int, gid int) (err error) {
return
}
_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -748,8 +737,6 @@ func Link(path string, link string) (err error) {
return
}
_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -775,7 +762,6 @@ func Lstat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -791,7 +777,6 @@ func Mkdir(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -807,7 +792,6 @@ func Mkfifo(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -823,7 +807,6 @@ func Mknod(path string, mode uint32, dev int) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -907,7 +890,6 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
return
}
r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
- use(unsafe.Pointer(_p0))
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -924,7 +906,6 @@ func Pathconf(path string, name int) (val int, err error) {
return
}
r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
- use(unsafe.Pointer(_p0))
val = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -998,7 +979,6 @@ func Readlink(path string, buf []byte) (n int, err error) {
_p1 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
- use(unsafe.Pointer(_p0))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1020,8 +1000,6 @@ func Rename(from string, to string) (err error) {
return
}
_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1037,7 +1015,6 @@ func Revoke(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1053,7 +1030,6 @@ func Rmdir(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1120,7 +1096,6 @@ func Setlogin(name string) (err error) {
return
}
_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1227,7 +1202,6 @@ func Stat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1243,7 +1217,6 @@ func Statfs(path string, stat *Statfs_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1264,8 +1237,6 @@ func Symlink(path string, link string) (err error) {
return
}
_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1291,7 +1262,6 @@ func Truncate(path string, length int64) (err error) {
return
}
_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1315,7 +1285,6 @@ func Undelete(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1331,7 +1300,6 @@ func Unlink(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1347,7 +1315,6 @@ func Unmount(path string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go
index ee96f78ba..672ada0e4 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go
@@ -1,7 +1,7 @@
-// mksyscall.pl syscall_bsd.go syscall_darwin.go syscall_darwin_amd64.go
+// mksyscall.pl -tags darwin,amd64 syscall_bsd.go syscall_darwin.go syscall_darwin_amd64.go
// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
-// +build amd64,darwin
+// +build darwin,amd64
package unix
@@ -222,7 +222,6 @@ func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr)
_p0 = unsafe.Pointer(&_zero)
}
_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
- use(_p0)
if e1 != 0 {
err = errnoErr(e1)
}
@@ -238,7 +237,6 @@ func utimes(path string, timeval *[2]Timeval) (err error) {
return
}
_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -307,7 +305,6 @@ func Access(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -333,7 +330,6 @@ func Chdir(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -349,7 +345,6 @@ func Chflags(path string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -365,7 +360,6 @@ func Chmod(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -381,7 +375,6 @@ func Chown(path string, uid int, gid int) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -397,7 +390,6 @@ func Chroot(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -449,8 +441,6 @@ func Exchangedata(path1 string, path2 string, options int) (err error) {
return
}
_, _, e1 := Syscall(SYS_EXCHANGEDATA, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -727,7 +717,6 @@ func Lchown(path string, uid int, gid int) (err error) {
return
}
_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -748,8 +737,6 @@ func Link(path string, link string) (err error) {
return
}
_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -775,7 +762,6 @@ func Lstat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -791,7 +777,6 @@ func Mkdir(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -807,7 +792,6 @@ func Mkfifo(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -823,7 +807,6 @@ func Mknod(path string, mode uint32, dev int) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -907,7 +890,6 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
return
}
r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
- use(unsafe.Pointer(_p0))
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -924,7 +906,6 @@ func Pathconf(path string, name int) (val int, err error) {
return
}
r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
- use(unsafe.Pointer(_p0))
val = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -998,7 +979,6 @@ func Readlink(path string, buf []byte) (n int, err error) {
_p1 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
- use(unsafe.Pointer(_p0))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1020,8 +1000,6 @@ func Rename(from string, to string) (err error) {
return
}
_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1037,7 +1015,6 @@ func Revoke(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1053,7 +1030,6 @@ func Rmdir(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1120,7 +1096,6 @@ func Setlogin(name string) (err error) {
return
}
_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1227,7 +1202,6 @@ func Stat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1243,7 +1217,6 @@ func Statfs(path string, stat *Statfs_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1264,8 +1237,6 @@ func Symlink(path string, link string) (err error) {
return
}
_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1291,7 +1262,6 @@ func Truncate(path string, length int64) (err error) {
return
}
_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1315,7 +1285,6 @@ func Undelete(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1331,7 +1300,6 @@ func Unlink(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1347,7 +1315,6 @@ func Unmount(path string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1423,7 +1390,6 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go
index e52cd0d54..d516409db 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go
@@ -1,7 +1,7 @@
-// mksyscall.pl syscall_bsd.go syscall_darwin.go syscall_darwin_arm.go
+// mksyscall.pl -l32 -tags darwin,arm syscall_bsd.go syscall_darwin.go syscall_darwin_arm.go
// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
-// +build arm,darwin
+// +build darwin,arm
package unix
@@ -222,7 +222,6 @@ func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr)
_p0 = unsafe.Pointer(&_zero)
}
_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
- use(_p0)
if e1 != 0 {
err = errnoErr(e1)
}
@@ -238,7 +237,6 @@ func utimes(path string, timeval *[2]Timeval) (err error) {
return
}
_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -307,7 +305,6 @@ func Access(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -333,7 +330,6 @@ func Chdir(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -349,7 +345,6 @@ func Chflags(path string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -365,7 +360,6 @@ func Chmod(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -381,7 +375,6 @@ func Chown(path string, uid int, gid int) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -397,7 +390,6 @@ func Chroot(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -449,8 +441,6 @@ func Exchangedata(path1 string, path2 string, options int) (err error) {
return
}
_, _, e1 := Syscall(SYS_EXCHANGEDATA, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -558,7 +548,7 @@ func Fsync(fd int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Ftruncate(fd int, length int64) (err error) {
- _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)
+ _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), uintptr(length>>32))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -727,7 +717,6 @@ func Lchown(path string, uid int, gid int) (err error) {
return
}
_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -748,8 +737,6 @@ func Link(path string, link string) (err error) {
return
}
_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -775,7 +762,6 @@ func Lstat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -791,7 +777,6 @@ func Mkdir(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -807,7 +792,6 @@ func Mkfifo(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -823,7 +807,6 @@ func Mknod(path string, mode uint32, dev int) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -907,7 +890,6 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
return
}
r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
- use(unsafe.Pointer(_p0))
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -924,7 +906,6 @@ func Pathconf(path string, name int) (val int, err error) {
return
}
r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
- use(unsafe.Pointer(_p0))
val = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -941,7 +922,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) {
} else {
_p0 = unsafe.Pointer(&_zero)
}
- r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
+ r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -958,7 +939,7 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
} else {
_p0 = unsafe.Pointer(&_zero)
}
- r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
+ r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -998,7 +979,6 @@ func Readlink(path string, buf []byte) (n int, err error) {
_p1 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
- use(unsafe.Pointer(_p0))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1020,8 +1000,6 @@ func Rename(from string, to string) (err error) {
return
}
_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1037,7 +1015,6 @@ func Revoke(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1053,7 +1030,6 @@ func Rmdir(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1063,8 +1039,8 @@ func Rmdir(path string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
- r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))
- newoffset = int64(r0)
+ r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0)
+ newoffset = int64(int64(r1)<<32 | int64(r0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1120,7 +1096,6 @@ func Setlogin(name string) (err error) {
return
}
_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1227,7 +1202,6 @@ func Stat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1243,7 +1217,6 @@ func Statfs(path string, stat *Statfs_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1264,8 +1237,6 @@ func Symlink(path string, link string) (err error) {
return
}
_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1290,8 +1261,7 @@ func Truncate(path string, length int64) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
- use(unsafe.Pointer(_p0))
+ _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1315,7 +1285,6 @@ func Undelete(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1331,7 +1300,6 @@ func Unlink(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1347,7 +1315,6 @@ func Unmount(path string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1374,7 +1341,7 @@ func write(fd int, p []byte) (n int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
- r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))
+ r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0)
ret = uintptr(r0)
if e1 != 0 {
err = errnoErr(e1)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go
index 9863ef99e..e97759c35 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go
@@ -1,7 +1,7 @@
-// mksyscall.pl syscall_bsd.go syscall_darwin.go syscall_darwin_arm64.go
+// mksyscall.pl -tags darwin,arm64 syscall_bsd.go syscall_darwin.go syscall_darwin_arm64.go
// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
-// +build arm64,darwin
+// +build darwin,arm64
package unix
@@ -222,7 +222,6 @@ func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr)
_p0 = unsafe.Pointer(&_zero)
}
_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
- use(_p0)
if e1 != 0 {
err = errnoErr(e1)
}
@@ -238,7 +237,6 @@ func utimes(path string, timeval *[2]Timeval) (err error) {
return
}
_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -307,7 +305,6 @@ func Access(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -333,7 +330,6 @@ func Chdir(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -349,7 +345,6 @@ func Chflags(path string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -365,7 +360,6 @@ func Chmod(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -381,7 +375,6 @@ func Chown(path string, uid int, gid int) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -397,7 +390,6 @@ func Chroot(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -449,8 +441,6 @@ func Exchangedata(path1 string, path2 string, options int) (err error) {
return
}
_, _, e1 := Syscall(SYS_EXCHANGEDATA, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -727,7 +717,6 @@ func Lchown(path string, uid int, gid int) (err error) {
return
}
_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -748,8 +737,6 @@ func Link(path string, link string) (err error) {
return
}
_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -775,7 +762,6 @@ func Lstat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -791,7 +777,6 @@ func Mkdir(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -807,7 +792,6 @@ func Mkfifo(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -823,7 +807,6 @@ func Mknod(path string, mode uint32, dev int) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -907,7 +890,6 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
return
}
r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
- use(unsafe.Pointer(_p0))
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -924,7 +906,6 @@ func Pathconf(path string, name int) (val int, err error) {
return
}
r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
- use(unsafe.Pointer(_p0))
val = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -998,7 +979,6 @@ func Readlink(path string, buf []byte) (n int, err error) {
_p1 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
- use(unsafe.Pointer(_p0))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1020,8 +1000,6 @@ func Rename(from string, to string) (err error) {
return
}
_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1037,7 +1015,6 @@ func Revoke(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1053,7 +1030,6 @@ func Rmdir(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1120,7 +1096,6 @@ func Setlogin(name string) (err error) {
return
}
_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1227,7 +1202,6 @@ func Stat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1243,7 +1217,6 @@ func Statfs(path string, stat *Statfs_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1264,8 +1237,6 @@ func Symlink(path string, link string) (err error) {
return
}
_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1291,7 +1262,6 @@ func Truncate(path string, length int64) (err error) {
return
}
_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1315,7 +1285,6 @@ func Undelete(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1331,7 +1300,6 @@ func Unlink(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1347,7 +1315,6 @@ func Unmount(path string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go
index 78de48dcf..3e9d82a27 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go
@@ -1,7 +1,7 @@
-// mksyscall.pl -dragonfly syscall_bsd.go syscall_dragonfly.go syscall_dragonfly_amd64.go
+// mksyscall.pl -dragonfly -tags dragonfly,amd64 syscall_bsd.go syscall_dragonfly.go syscall_dragonfly_amd64.go
// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
-// +build amd64,dragonfly
+// +build dragonfly,amd64
package unix
@@ -222,7 +222,6 @@ func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr)
_p0 = unsafe.Pointer(&_zero)
}
_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
- use(_p0)
if e1 != 0 {
err = errnoErr(e1)
}
@@ -238,7 +237,6 @@ func utimes(path string, timeval *[2]Timeval) (err error) {
return
}
_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -321,7 +319,6 @@ func Access(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -347,7 +344,6 @@ func Chdir(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -363,7 +359,6 @@ func Chflags(path string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -379,7 +374,6 @@ func Chmod(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -395,7 +389,6 @@ func Chown(path string, uid int, gid int) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -411,7 +404,6 @@ func Chroot(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -739,7 +731,6 @@ func Lchown(path string, uid int, gid int) (err error) {
return
}
_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -760,8 +751,6 @@ func Link(path string, link string) (err error) {
return
}
_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -787,7 +776,6 @@ func Lstat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -803,7 +791,6 @@ func Mkdir(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -819,7 +806,6 @@ func Mkfifo(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -835,7 +821,6 @@ func Mknod(path string, mode uint32, dev int) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -929,7 +914,6 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
return
}
r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
- use(unsafe.Pointer(_p0))
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -946,7 +930,6 @@ func Pathconf(path string, name int) (val int, err error) {
return
}
r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
- use(unsafe.Pointer(_p0))
val = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -986,7 +969,6 @@ func Readlink(path string, buf []byte) (n int, err error) {
_p1 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
- use(unsafe.Pointer(_p0))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1008,8 +990,6 @@ func Rename(from string, to string) (err error) {
return
}
_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1025,7 +1005,6 @@ func Revoke(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1041,7 +1020,6 @@ func Rmdir(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1108,7 +1086,6 @@ func Setlogin(name string) (err error) {
return
}
_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1225,7 +1202,6 @@ func Stat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1241,7 +1217,6 @@ func Statfs(path string, stat *Statfs_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1262,8 +1237,6 @@ func Symlink(path string, link string) (err error) {
return
}
_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1289,7 +1262,6 @@ func Truncate(path string, length int64) (err error) {
return
}
_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1313,7 +1285,6 @@ func Undelete(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1329,7 +1300,6 @@ func Unlink(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1345,7 +1315,6 @@ func Unmount(path string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go
index fade994dc..f53801cee 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go
@@ -1,7 +1,7 @@
-// mksyscall.pl -l32 syscall_bsd.go syscall_freebsd.go syscall_freebsd_386.go
+// mksyscall.pl -l32 -tags freebsd,386 syscall_bsd.go syscall_freebsd.go syscall_freebsd_386.go
// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
-// +build 386,freebsd
+// +build freebsd,386
package unix
@@ -222,7 +222,6 @@ func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr)
_p0 = unsafe.Pointer(&_zero)
}
_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
- use(_p0)
if e1 != 0 {
err = errnoErr(e1)
}
@@ -238,7 +237,6 @@ func utimes(path string, timeval *[2]Timeval) (err error) {
return
}
_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -287,7 +285,6 @@ func Access(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -313,7 +310,6 @@ func Chdir(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -329,7 +325,6 @@ func Chflags(path string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -345,7 +340,6 @@ func Chmod(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -361,7 +355,6 @@ func Chown(path string, uid int, gid int) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -377,7 +370,6 @@ func Chroot(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -431,7 +423,6 @@ func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbyt
return
}
r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
- use(unsafe.Pointer(_p0))
ret = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -448,7 +439,6 @@ func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbyt
return
}
r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
- use(unsafe.Pointer(_p0))
ret = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -465,7 +455,6 @@ func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {
return
}
_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -497,8 +486,6 @@ func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintpt
return
}
r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
ret = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -520,8 +507,6 @@ func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintpt
return
}
r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
ret = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -543,8 +528,6 @@ func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err err
return
}
_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -560,7 +543,6 @@ func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (
return
}
r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
- use(unsafe.Pointer(_p0))
ret = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -582,8 +564,6 @@ func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintpt
return
}
r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
ret = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -605,8 +585,6 @@ func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintpt
return
}
r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
ret = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -628,8 +606,6 @@ func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err err
return
}
_, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -645,7 +621,6 @@ func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (
return
}
r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
- use(unsafe.Pointer(_p0))
ret = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -946,7 +921,6 @@ func Lchown(path string, uid int, gid int) (err error) {
return
}
_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -967,8 +941,6 @@ func Link(path string, link string) (err error) {
return
}
_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -994,7 +966,6 @@ func Lstat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1010,7 +981,6 @@ func Mkdir(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1026,7 +996,6 @@ func Mkfifo(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1042,7 +1011,6 @@ func Mknod(path string, mode uint32, dev int) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1136,7 +1104,6 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
return
}
r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
- use(unsafe.Pointer(_p0))
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1153,7 +1120,6 @@ func Pathconf(path string, name int) (val int, err error) {
return
}
r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
- use(unsafe.Pointer(_p0))
val = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1227,7 +1193,6 @@ func Readlink(path string, buf []byte) (n int, err error) {
_p1 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
- use(unsafe.Pointer(_p0))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1249,8 +1214,6 @@ func Rename(from string, to string) (err error) {
return
}
_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1266,7 +1229,6 @@ func Revoke(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1282,7 +1244,6 @@ func Rmdir(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1349,7 +1310,6 @@ func Setlogin(name string) (err error) {
return
}
_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1466,7 +1426,6 @@ func Stat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1482,7 +1441,6 @@ func Statfs(path string, stat *Statfs_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1503,8 +1461,6 @@ func Symlink(path string, link string) (err error) {
return
}
_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1530,7 +1486,6 @@ func Truncate(path string, length int64) (err error) {
return
}
_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1554,7 +1509,6 @@ func Undelete(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1570,7 +1524,6 @@ func Unlink(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1586,7 +1539,6 @@ func Unmount(path string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go
index c28281e83..55b07412c 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go
@@ -1,7 +1,7 @@
-// mksyscall.pl syscall_bsd.go syscall_freebsd.go syscall_freebsd_amd64.go
+// mksyscall.pl -tags freebsd,amd64 syscall_bsd.go syscall_freebsd.go syscall_freebsd_amd64.go
// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
-// +build amd64,freebsd
+// +build freebsd,amd64
package unix
@@ -222,7 +222,6 @@ func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr)
_p0 = unsafe.Pointer(&_zero)
}
_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
- use(_p0)
if e1 != 0 {
err = errnoErr(e1)
}
@@ -238,7 +237,6 @@ func utimes(path string, timeval *[2]Timeval) (err error) {
return
}
_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -287,7 +285,6 @@ func Access(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -313,7 +310,6 @@ func Chdir(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -329,7 +325,6 @@ func Chflags(path string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -345,7 +340,6 @@ func Chmod(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -361,7 +355,6 @@ func Chown(path string, uid int, gid int) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -377,7 +370,6 @@ func Chroot(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -431,7 +423,6 @@ func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbyt
return
}
r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
- use(unsafe.Pointer(_p0))
ret = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -448,7 +439,6 @@ func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbyt
return
}
r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
- use(unsafe.Pointer(_p0))
ret = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -465,7 +455,6 @@ func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {
return
}
_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -497,8 +486,6 @@ func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintpt
return
}
r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
ret = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -520,8 +507,6 @@ func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintpt
return
}
r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
ret = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -543,8 +528,6 @@ func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err err
return
}
_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -560,7 +543,6 @@ func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (
return
}
r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
- use(unsafe.Pointer(_p0))
ret = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -582,8 +564,6 @@ func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintpt
return
}
r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
ret = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -605,8 +585,6 @@ func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintpt
return
}
r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
ret = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -628,8 +606,6 @@ func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err err
return
}
_, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -645,7 +621,6 @@ func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (
return
}
r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
- use(unsafe.Pointer(_p0))
ret = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -946,7 +921,6 @@ func Lchown(path string, uid int, gid int) (err error) {
return
}
_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -967,8 +941,6 @@ func Link(path string, link string) (err error) {
return
}
_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -994,7 +966,6 @@ func Lstat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1010,7 +981,6 @@ func Mkdir(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1026,7 +996,6 @@ func Mkfifo(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1042,7 +1011,6 @@ func Mknod(path string, mode uint32, dev int) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1136,7 +1104,6 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
return
}
r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
- use(unsafe.Pointer(_p0))
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1153,7 +1120,6 @@ func Pathconf(path string, name int) (val int, err error) {
return
}
r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
- use(unsafe.Pointer(_p0))
val = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1227,7 +1193,6 @@ func Readlink(path string, buf []byte) (n int, err error) {
_p1 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
- use(unsafe.Pointer(_p0))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1249,8 +1214,6 @@ func Rename(from string, to string) (err error) {
return
}
_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1266,7 +1229,6 @@ func Revoke(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1282,7 +1244,6 @@ func Rmdir(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1349,7 +1310,6 @@ func Setlogin(name string) (err error) {
return
}
_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1466,7 +1426,6 @@ func Stat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1482,7 +1441,6 @@ func Statfs(path string, stat *Statfs_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1503,8 +1461,6 @@ func Symlink(path string, link string) (err error) {
return
}
_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1530,7 +1486,6 @@ func Truncate(path string, length int64) (err error) {
return
}
_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1554,7 +1509,6 @@ func Undelete(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1570,7 +1524,6 @@ func Unlink(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1586,7 +1539,6 @@ func Unmount(path string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go
index a18ba5c88..0e9b42bf4 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go
@@ -1,7 +1,7 @@
-// mksyscall.pl -l32 -arm syscall_bsd.go syscall_freebsd.go syscall_freebsd_arm.go
+// mksyscall.pl -l32 -arm -tags freebsd,arm syscall_bsd.go syscall_freebsd.go syscall_freebsd_arm.go
// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
-// +build arm,freebsd
+// +build freebsd,arm
package unix
@@ -222,7 +222,6 @@ func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr)
_p0 = unsafe.Pointer(&_zero)
}
_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
- use(_p0)
if e1 != 0 {
err = errnoErr(e1)
}
@@ -238,7 +237,6 @@ func utimes(path string, timeval *[2]Timeval) (err error) {
return
}
_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -287,7 +285,6 @@ func Access(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -313,7 +310,6 @@ func Chdir(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -329,7 +325,6 @@ func Chflags(path string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -345,7 +340,6 @@ func Chmod(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -361,7 +355,6 @@ func Chown(path string, uid int, gid int) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -377,7 +370,6 @@ func Chroot(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -431,7 +423,6 @@ func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbyt
return
}
r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
- use(unsafe.Pointer(_p0))
ret = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -448,7 +439,6 @@ func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbyt
return
}
r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
- use(unsafe.Pointer(_p0))
ret = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -465,7 +455,6 @@ func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {
return
}
_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -497,8 +486,6 @@ func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintpt
return
}
r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
ret = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -520,8 +507,6 @@ func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintpt
return
}
r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
ret = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -543,8 +528,6 @@ func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err err
return
}
_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -560,7 +543,6 @@ func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (
return
}
r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
- use(unsafe.Pointer(_p0))
ret = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -582,8 +564,6 @@ func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintpt
return
}
r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
ret = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -605,8 +585,6 @@ func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintpt
return
}
r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
ret = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -628,8 +606,6 @@ func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err err
return
}
_, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -645,7 +621,6 @@ func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (
return
}
r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
- use(unsafe.Pointer(_p0))
ret = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -946,7 +921,6 @@ func Lchown(path string, uid int, gid int) (err error) {
return
}
_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -967,8 +941,6 @@ func Link(path string, link string) (err error) {
return
}
_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -994,7 +966,6 @@ func Lstat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1010,7 +981,6 @@ func Mkdir(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1026,7 +996,6 @@ func Mkfifo(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1042,7 +1011,6 @@ func Mknod(path string, mode uint32, dev int) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1136,7 +1104,6 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
return
}
r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
- use(unsafe.Pointer(_p0))
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1153,7 +1120,6 @@ func Pathconf(path string, name int) (val int, err error) {
return
}
r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
- use(unsafe.Pointer(_p0))
val = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1227,7 +1193,6 @@ func Readlink(path string, buf []byte) (n int, err error) {
_p1 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
- use(unsafe.Pointer(_p0))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1249,8 +1214,6 @@ func Rename(from string, to string) (err error) {
return
}
_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1266,7 +1229,6 @@ func Revoke(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1282,7 +1244,6 @@ func Rmdir(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1349,7 +1310,6 @@ func Setlogin(name string) (err error) {
return
}
_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1466,7 +1426,6 @@ func Stat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1482,7 +1441,6 @@ func Statfs(path string, stat *Statfs_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1503,8 +1461,6 @@ func Symlink(path string, link string) (err error) {
return
}
_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1530,7 +1486,6 @@ func Truncate(path string, length int64) (err error) {
return
}
_, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1554,7 +1509,6 @@ func Undelete(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1570,7 +1524,6 @@ func Unlink(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1586,7 +1539,6 @@ func Unmount(path string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go
index fa92387b1..d4ec806db 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go
@@ -1,7 +1,7 @@
-// mksyscall.pl -l32 syscall_linux.go syscall_linux_386.go
+// mksyscall.pl -l32 -tags linux,386 syscall_linux.go syscall_linux_386.go
// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
-// +build 386,linux
+// +build linux,386
package unix
@@ -26,8 +26,6 @@ func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags in
return
}
_, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -43,7 +41,6 @@ func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error)
return
}
r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)
- use(unsafe.Pointer(_p0))
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -77,7 +74,6 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
_p1 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
- use(unsafe.Pointer(_p0))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -99,8 +95,6 @@ func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
return
}
_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -116,7 +110,6 @@ func Unlinkat(dirfd int, path string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -132,7 +125,6 @@ func utimes(path string, times *[2]Timeval) (err error) {
return
}
_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -148,7 +140,6 @@ func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error
return
}
_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -212,7 +203,6 @@ func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {
return
}
_, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -238,9 +228,6 @@ func mount(source string, target string, fstype string, flags uintptr, data *byt
return
}
_, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
- use(unsafe.Pointer(_p2))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -256,7 +243,6 @@ func Acct(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -283,7 +269,6 @@ func Chdir(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -299,7 +284,6 @@ func Chroot(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -395,7 +379,6 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -441,7 +424,6 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -457,7 +439,6 @@ func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -562,6 +543,23 @@ func Getpriority(which int, who int) (prio int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Getrandom(buf []byte, flags int) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(buf) > 0 {
+ _p0 = unsafe.Pointer(&buf[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Getrusage(who int, rusage *Rusage) (err error) {
_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
if e1 != 0 {
@@ -609,8 +607,6 @@ func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
_p2 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
sz = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -627,7 +623,6 @@ func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err e
return
}
r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))
- use(unsafe.Pointer(_p0))
watchdesc = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -699,7 +694,6 @@ func Listxattr(path string, dest []byte) (sz int, err error) {
_p1 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))
- use(unsafe.Pointer(_p0))
sz = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -716,7 +710,6 @@ func Mkdirat(dirfd int, path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -732,7 +725,6 @@ func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -763,8 +755,6 @@ func PivotRoot(newroot string, putold string) (err error) {
return
}
_, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -822,8 +812,6 @@ func Removexattr(path string, attr string) (err error) {
return
}
_, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -844,8 +832,6 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e
return
}
_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -955,8 +941,6 @@ func Setxattr(path string, attr string, data []byte, flags int) (err error) {
_p2 = unsafe.Pointer(&_zero)
}
_, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1039,7 +1023,6 @@ func Unmount(target string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1351,7 +1334,6 @@ func Lchown(path string, uid int, gid int) (err error) {
return
}
_, _, e1 := Syscall(SYS_LCHOWN32, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1367,7 +1349,6 @@ func Lstat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1499,7 +1480,6 @@ func Stat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1525,7 +1505,6 @@ func Truncate(path string, length int64) (err error) {
return
}
_, _, e1 := Syscall(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1652,7 +1631,6 @@ func Utime(path string, buf *Utimbuf) (err error) {
return
}
_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go
index b34d5c26f..8b2e87dfc 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go
@@ -1,7 +1,7 @@
-// mksyscall.pl syscall_linux.go syscall_linux_amd64.go
+// mksyscall.pl -tags linux,amd64 syscall_linux.go syscall_linux_amd64.go
// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
-// +build amd64,linux
+// +build linux,amd64
package unix
@@ -26,8 +26,6 @@ func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags in
return
}
_, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -43,7 +41,6 @@ func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error)
return
}
r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)
- use(unsafe.Pointer(_p0))
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -77,7 +74,6 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
_p1 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
- use(unsafe.Pointer(_p0))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -99,8 +95,6 @@ func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
return
}
_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -116,7 +110,6 @@ func Unlinkat(dirfd int, path string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -132,7 +125,6 @@ func utimes(path string, times *[2]Timeval) (err error) {
return
}
_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -148,7 +140,6 @@ func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error
return
}
_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -212,7 +203,6 @@ func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {
return
}
_, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -238,9 +228,6 @@ func mount(source string, target string, fstype string, flags uintptr, data *byt
return
}
_, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
- use(unsafe.Pointer(_p2))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -256,7 +243,6 @@ func Acct(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -283,7 +269,6 @@ func Chdir(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -299,7 +284,6 @@ func Chroot(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -395,7 +379,6 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -441,7 +424,6 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -457,7 +439,6 @@ func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -562,6 +543,23 @@ func Getpriority(which int, who int) (prio int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Getrandom(buf []byte, flags int) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(buf) > 0 {
+ _p0 = unsafe.Pointer(&buf[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Getrusage(who int, rusage *Rusage) (err error) {
_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
if e1 != 0 {
@@ -609,8 +607,6 @@ func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
_p2 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
sz = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -627,7 +623,6 @@ func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err e
return
}
r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))
- use(unsafe.Pointer(_p0))
watchdesc = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -699,7 +694,6 @@ func Listxattr(path string, dest []byte) (sz int, err error) {
_p1 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))
- use(unsafe.Pointer(_p0))
sz = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -716,7 +710,6 @@ func Mkdirat(dirfd int, path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -732,7 +725,6 @@ func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -763,8 +755,6 @@ func PivotRoot(newroot string, putold string) (err error) {
return
}
_, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -822,8 +812,6 @@ func Removexattr(path string, attr string) (err error) {
return
}
_, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -844,8 +832,6 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e
return
}
_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -955,8 +941,6 @@ func Setxattr(path string, attr string, data []byte, flags int) (err error) {
_p2 = unsafe.Pointer(&_zero)
}
_, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1039,7 +1023,6 @@ func Unmount(target string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1368,7 +1351,6 @@ func Lchown(path string, uid int, gid int) (err error) {
return
}
_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1394,7 +1376,6 @@ func Lstat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1578,7 +1559,6 @@ func Stat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1594,7 +1574,6 @@ func Statfs(path string, buf *Statfs_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1620,7 +1599,6 @@ func Truncate(path string, length int64) (err error) {
return
}
_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1826,7 +1804,6 @@ func Utime(path string, buf *Utimbuf) (err error) {
return
}
_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go
index 2e5cb3984..82d36a411 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go
@@ -1,7 +1,7 @@
-// mksyscall.pl -l32 -arm syscall_linux.go syscall_linux_arm.go
+// mksyscall.pl -l32 -arm -tags linux,arm syscall_linux.go syscall_linux_arm.go
// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
-// +build arm,linux
+// +build linux,arm
package unix
@@ -26,8 +26,6 @@ func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags in
return
}
_, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -43,7 +41,6 @@ func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error)
return
}
r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)
- use(unsafe.Pointer(_p0))
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -77,7 +74,6 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
_p1 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
- use(unsafe.Pointer(_p0))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -99,8 +95,6 @@ func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
return
}
_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -116,7 +110,6 @@ func Unlinkat(dirfd int, path string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -132,7 +125,6 @@ func utimes(path string, times *[2]Timeval) (err error) {
return
}
_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -148,7 +140,6 @@ func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error
return
}
_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -212,7 +203,6 @@ func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {
return
}
_, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -238,9 +228,6 @@ func mount(source string, target string, fstype string, flags uintptr, data *byt
return
}
_, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
- use(unsafe.Pointer(_p2))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -256,7 +243,6 @@ func Acct(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -283,7 +269,6 @@ func Chdir(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -299,7 +284,6 @@ func Chroot(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -395,7 +379,6 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -441,7 +424,6 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -457,7 +439,6 @@ func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -562,6 +543,23 @@ func Getpriority(which int, who int) (prio int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Getrandom(buf []byte, flags int) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(buf) > 0 {
+ _p0 = unsafe.Pointer(&buf[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Getrusage(who int, rusage *Rusage) (err error) {
_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
if e1 != 0 {
@@ -609,8 +607,6 @@ func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
_p2 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
sz = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -627,7 +623,6 @@ func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err e
return
}
r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))
- use(unsafe.Pointer(_p0))
watchdesc = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -699,7 +694,6 @@ func Listxattr(path string, dest []byte) (sz int, err error) {
_p1 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))
- use(unsafe.Pointer(_p0))
sz = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -716,7 +710,6 @@ func Mkdirat(dirfd int, path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -732,7 +725,6 @@ func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -763,8 +755,6 @@ func PivotRoot(newroot string, putold string) (err error) {
return
}
_, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -822,8 +812,6 @@ func Removexattr(path string, attr string) (err error) {
return
}
_, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -844,8 +832,6 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e
return
}
_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -955,8 +941,6 @@ func Setxattr(path string, attr string, data []byte, flags int) (err error) {
_p2 = unsafe.Pointer(&_zero)
}
_, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1039,7 +1023,6 @@ func Unmount(target string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1480,7 +1463,6 @@ func Lchown(path string, uid int, gid int) (err error) {
return
}
_, _, e1 := Syscall(SYS_LCHOWN32, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1506,7 +1488,6 @@ func Lstat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1625,7 +1606,6 @@ func Stat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1712,7 +1692,6 @@ func Truncate(path string, length int64) (err error) {
return
}
_, _, e1 := Syscall6(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go
index 0d584cc0d..f6cc3200d 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go
@@ -1,7 +1,7 @@
-// mksyscall.pl syscall_linux.go syscall_linux_arm64.go
+// mksyscall.pl -tags linux,arm64 syscall_linux.go syscall_linux_arm64.go
// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
-// +build arm64,linux
+// +build linux,arm64
package unix
@@ -26,8 +26,6 @@ func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags in
return
}
_, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -43,7 +41,6 @@ func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error)
return
}
r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)
- use(unsafe.Pointer(_p0))
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -77,7 +74,6 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
_p1 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
- use(unsafe.Pointer(_p0))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -99,8 +95,6 @@ func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
return
}
_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -116,7 +110,6 @@ func Unlinkat(dirfd int, path string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -132,7 +125,6 @@ func utimes(path string, times *[2]Timeval) (err error) {
return
}
_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -148,7 +140,6 @@ func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error
return
}
_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -212,7 +203,6 @@ func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {
return
}
_, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -238,9 +228,6 @@ func mount(source string, target string, fstype string, flags uintptr, data *byt
return
}
_, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
- use(unsafe.Pointer(_p2))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -256,7 +243,6 @@ func Acct(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -283,7 +269,6 @@ func Chdir(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -299,7 +284,6 @@ func Chroot(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -395,7 +379,6 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -441,7 +424,6 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -457,7 +439,6 @@ func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -562,6 +543,23 @@ func Getpriority(which int, who int) (prio int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Getrandom(buf []byte, flags int) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(buf) > 0 {
+ _p0 = unsafe.Pointer(&buf[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Getrusage(who int, rusage *Rusage) (err error) {
_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
if e1 != 0 {
@@ -609,8 +607,6 @@ func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
_p2 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
sz = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -627,7 +623,6 @@ func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err e
return
}
r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))
- use(unsafe.Pointer(_p0))
watchdesc = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -699,7 +694,6 @@ func Listxattr(path string, dest []byte) (sz int, err error) {
_p1 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))
- use(unsafe.Pointer(_p0))
sz = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -716,7 +710,6 @@ func Mkdirat(dirfd int, path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -732,7 +725,6 @@ func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -763,8 +755,6 @@ func PivotRoot(newroot string, putold string) (err error) {
return
}
_, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -822,8 +812,6 @@ func Removexattr(path string, attr string) (err error) {
return
}
_, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -844,8 +832,6 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e
return
}
_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -955,8 +941,6 @@ func Setxattr(path string, attr string, data []byte, flags int) (err error) {
_p2 = unsafe.Pointer(&_zero)
}
_, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1039,7 +1023,6 @@ func Unmount(target string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1255,7 +1238,6 @@ func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1501,7 +1483,6 @@ func Statfs(path string, buf *Statfs_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1527,7 +1508,6 @@ func Truncate(path string, length int64) (err error) {
return
}
_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go
index a18e0b171..f91afb481 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go
@@ -1,7 +1,7 @@
-// mksyscall.pl -b32 -arm syscall_linux.go syscall_linux_mipsx.go
+// mksyscall.pl -b32 -arm -tags linux,mips syscall_linux.go syscall_linux_mipsx.go
// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
-// +build mips,linux
+// +build linux,mips
package unix
@@ -26,8 +26,6 @@ func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags in
return
}
_, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -43,7 +41,6 @@ func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error)
return
}
r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)
- use(unsafe.Pointer(_p0))
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -77,7 +74,6 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
_p1 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
- use(unsafe.Pointer(_p0))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -99,8 +95,6 @@ func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
return
}
_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -116,7 +110,6 @@ func Unlinkat(dirfd int, path string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -132,7 +125,6 @@ func utimes(path string, times *[2]Timeval) (err error) {
return
}
_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -148,7 +140,6 @@ func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error
return
}
_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -212,7 +203,6 @@ func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {
return
}
_, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -238,9 +228,6 @@ func mount(source string, target string, fstype string, flags uintptr, data *byt
return
}
_, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
- use(unsafe.Pointer(_p2))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -256,7 +243,6 @@ func Acct(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -283,7 +269,6 @@ func Chdir(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -299,7 +284,6 @@ func Chroot(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -395,7 +379,6 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -441,7 +424,6 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -457,7 +439,6 @@ func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -562,6 +543,23 @@ func Getpriority(which int, who int) (prio int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Getrandom(buf []byte, flags int) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(buf) > 0 {
+ _p0 = unsafe.Pointer(&buf[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Getrusage(who int, rusage *Rusage) (err error) {
_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
if e1 != 0 {
@@ -609,8 +607,6 @@ func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
_p2 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
sz = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -627,7 +623,6 @@ func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err e
return
}
r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))
- use(unsafe.Pointer(_p0))
watchdesc = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -699,7 +694,6 @@ func Listxattr(path string, dest []byte) (sz int, err error) {
_p1 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))
- use(unsafe.Pointer(_p0))
sz = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -716,7 +710,6 @@ func Mkdirat(dirfd int, path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -732,7 +725,6 @@ func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -763,8 +755,6 @@ func PivotRoot(newroot string, putold string) (err error) {
return
}
_, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -822,8 +812,6 @@ func Removexattr(path string, attr string) (err error) {
return
}
_, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -844,8 +832,6 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e
return
}
_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -955,8 +941,6 @@ func Setxattr(path string, attr string, data []byte, flags int) (err error) {
_p2 = unsafe.Pointer(&_zero)
}
_, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1039,7 +1023,6 @@ func Unmount(target string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1280,7 +1263,6 @@ func Lchown(path string, uid int, gid int) (err error) {
return
}
_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1453,7 +1435,6 @@ func Truncate(path string, length int64) (err error) {
return
}
_, _, e1 := Syscall6(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length>>32), uintptr(length), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1700,7 +1681,6 @@ func Lstat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1726,7 +1706,6 @@ func Stat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1742,7 +1721,6 @@ func Utime(path string, buf *Utimbuf) (err error) {
return
}
_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go
index bf6f3603b..657d11eff 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go
@@ -1,7 +1,7 @@
-// mksyscall.pl syscall_linux.go syscall_linux_mips64x.go
+// mksyscall.pl -tags linux,mips64 syscall_linux.go syscall_linux_mips64x.go
// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
-// +build mips64,linux
+// +build linux,mips64
package unix
@@ -26,8 +26,6 @@ func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags in
return
}
_, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -43,7 +41,6 @@ func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error)
return
}
r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)
- use(unsafe.Pointer(_p0))
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -77,7 +74,6 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
_p1 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
- use(unsafe.Pointer(_p0))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -99,8 +95,6 @@ func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
return
}
_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -116,7 +110,6 @@ func Unlinkat(dirfd int, path string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -132,7 +125,6 @@ func utimes(path string, times *[2]Timeval) (err error) {
return
}
_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -148,7 +140,6 @@ func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error
return
}
_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -212,7 +203,6 @@ func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {
return
}
_, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -238,9 +228,6 @@ func mount(source string, target string, fstype string, flags uintptr, data *byt
return
}
_, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
- use(unsafe.Pointer(_p2))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -256,7 +243,6 @@ func Acct(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -283,7 +269,6 @@ func Chdir(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -299,7 +284,6 @@ func Chroot(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -395,7 +379,6 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -441,7 +424,6 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -457,7 +439,6 @@ func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -562,6 +543,23 @@ func Getpriority(which int, who int) (prio int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Getrandom(buf []byte, flags int) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(buf) > 0 {
+ _p0 = unsafe.Pointer(&buf[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Getrusage(who int, rusage *Rusage) (err error) {
_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
if e1 != 0 {
@@ -609,8 +607,6 @@ func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
_p2 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
sz = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -627,7 +623,6 @@ func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err e
return
}
r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))
- use(unsafe.Pointer(_p0))
watchdesc = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -699,7 +694,6 @@ func Listxattr(path string, dest []byte) (sz int, err error) {
_p1 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))
- use(unsafe.Pointer(_p0))
sz = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -716,7 +710,6 @@ func Mkdirat(dirfd int, path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -732,7 +725,6 @@ func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -763,8 +755,6 @@ func PivotRoot(newroot string, putold string) (err error) {
return
}
_, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -822,8 +812,6 @@ func Removexattr(path string, attr string) (err error) {
return
}
_, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -844,8 +832,6 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e
return
}
_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -955,8 +941,6 @@ func Setxattr(path string, attr string, data []byte, flags int) (err error) {
_p2 = unsafe.Pointer(&_zero)
}
_, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1039,7 +1023,6 @@ func Unmount(target string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1307,7 +1290,6 @@ func Lchown(path string, uid int, gid int) (err error) {
return
}
_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1501,7 +1483,6 @@ func Statfs(path string, buf *Statfs_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1527,7 +1508,6 @@ func Truncate(path string, length int64) (err error) {
return
}
_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1743,7 +1723,6 @@ func Utime(path string, buf *Utimbuf) (err error) {
return
}
_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1779,7 +1758,6 @@ func lstat(path string, st *stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1795,7 +1773,6 @@ func stat(path string, st *stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go
index 8c86bd70b..31ff1774c 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go
@@ -1,7 +1,7 @@
-// mksyscall.pl syscall_linux.go syscall_linux_mips64x.go
+// mksyscall.pl -tags linux,mips64le syscall_linux.go syscall_linux_mips64x.go
// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
-// +build mips64le,linux
+// +build linux,mips64le
package unix
@@ -26,8 +26,6 @@ func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags in
return
}
_, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -43,7 +41,6 @@ func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error)
return
}
r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)
- use(unsafe.Pointer(_p0))
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -77,7 +74,6 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
_p1 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
- use(unsafe.Pointer(_p0))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -99,8 +95,6 @@ func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
return
}
_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -116,7 +110,6 @@ func Unlinkat(dirfd int, path string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -132,7 +125,6 @@ func utimes(path string, times *[2]Timeval) (err error) {
return
}
_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -148,7 +140,6 @@ func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error
return
}
_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -212,7 +203,6 @@ func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {
return
}
_, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -238,9 +228,6 @@ func mount(source string, target string, fstype string, flags uintptr, data *byt
return
}
_, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
- use(unsafe.Pointer(_p2))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -256,7 +243,6 @@ func Acct(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -283,7 +269,6 @@ func Chdir(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -299,7 +284,6 @@ func Chroot(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -395,7 +379,6 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -441,7 +424,6 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -457,7 +439,6 @@ func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -562,6 +543,23 @@ func Getpriority(which int, who int) (prio int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Getrandom(buf []byte, flags int) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(buf) > 0 {
+ _p0 = unsafe.Pointer(&buf[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Getrusage(who int, rusage *Rusage) (err error) {
_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
if e1 != 0 {
@@ -609,8 +607,6 @@ func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
_p2 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
sz = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -627,7 +623,6 @@ func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err e
return
}
r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))
- use(unsafe.Pointer(_p0))
watchdesc = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -699,7 +694,6 @@ func Listxattr(path string, dest []byte) (sz int, err error) {
_p1 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))
- use(unsafe.Pointer(_p0))
sz = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -716,7 +710,6 @@ func Mkdirat(dirfd int, path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -732,7 +725,6 @@ func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -763,8 +755,6 @@ func PivotRoot(newroot string, putold string) (err error) {
return
}
_, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -822,8 +812,6 @@ func Removexattr(path string, attr string) (err error) {
return
}
_, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -844,8 +832,6 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e
return
}
_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -955,8 +941,6 @@ func Setxattr(path string, attr string, data []byte, flags int) (err error) {
_p2 = unsafe.Pointer(&_zero)
}
_, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1039,7 +1023,6 @@ func Unmount(target string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1307,7 +1290,6 @@ func Lchown(path string, uid int, gid int) (err error) {
return
}
_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1501,7 +1483,6 @@ func Statfs(path string, buf *Statfs_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1527,7 +1508,6 @@ func Truncate(path string, length int64) (err error) {
return
}
_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1743,7 +1723,6 @@ func Utime(path string, buf *Utimbuf) (err error) {
return
}
_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1779,7 +1758,6 @@ func lstat(path string, st *stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1795,7 +1773,6 @@ func stat(path string, st *stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go
index 645e00ebd..797e6336e 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go
@@ -1,7 +1,7 @@
-// mksyscall.pl -l32 -arm syscall_linux.go syscall_linux_mipsx.go
+// mksyscall.pl -l32 -arm -tags linux,mipsle syscall_linux.go syscall_linux_mipsx.go
// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
-// +build mipsle,linux
+// +build linux,mipsle
package unix
@@ -26,8 +26,6 @@ func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags in
return
}
_, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -43,7 +41,6 @@ func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error)
return
}
r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)
- use(unsafe.Pointer(_p0))
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -77,7 +74,6 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
_p1 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
- use(unsafe.Pointer(_p0))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -99,8 +95,6 @@ func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
return
}
_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -116,7 +110,6 @@ func Unlinkat(dirfd int, path string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -132,7 +125,6 @@ func utimes(path string, times *[2]Timeval) (err error) {
return
}
_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -148,7 +140,6 @@ func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error
return
}
_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -212,7 +203,6 @@ func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {
return
}
_, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -238,9 +228,6 @@ func mount(source string, target string, fstype string, flags uintptr, data *byt
return
}
_, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
- use(unsafe.Pointer(_p2))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -256,7 +243,6 @@ func Acct(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -283,7 +269,6 @@ func Chdir(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -299,7 +284,6 @@ func Chroot(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -395,7 +379,6 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -441,7 +424,6 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -457,7 +439,6 @@ func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -562,6 +543,23 @@ func Getpriority(which int, who int) (prio int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Getrandom(buf []byte, flags int) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(buf) > 0 {
+ _p0 = unsafe.Pointer(&buf[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Getrusage(who int, rusage *Rusage) (err error) {
_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
if e1 != 0 {
@@ -609,8 +607,6 @@ func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
_p2 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
sz = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -627,7 +623,6 @@ func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err e
return
}
r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))
- use(unsafe.Pointer(_p0))
watchdesc = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -699,7 +694,6 @@ func Listxattr(path string, dest []byte) (sz int, err error) {
_p1 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))
- use(unsafe.Pointer(_p0))
sz = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -716,7 +710,6 @@ func Mkdirat(dirfd int, path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -732,7 +725,6 @@ func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -763,8 +755,6 @@ func PivotRoot(newroot string, putold string) (err error) {
return
}
_, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -822,8 +812,6 @@ func Removexattr(path string, attr string) (err error) {
return
}
_, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -844,8 +832,6 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e
return
}
_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -955,8 +941,6 @@ func Setxattr(path string, attr string, data []byte, flags int) (err error) {
_p2 = unsafe.Pointer(&_zero)
}
_, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1039,7 +1023,6 @@ func Unmount(target string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1280,7 +1263,6 @@ func Lchown(path string, uid int, gid int) (err error) {
return
}
_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1453,7 +1435,6 @@ func Truncate(path string, length int64) (err error) {
return
}
_, _, e1 := Syscall6(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1700,7 +1681,6 @@ func Lstat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1726,7 +1706,6 @@ func Stat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1742,7 +1721,6 @@ func Utime(path string, buf *Utimbuf) (err error) {
return
}
_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go
index f5d488b4a..307dbb5bd 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go
@@ -1,7 +1,7 @@
-// mksyscall.pl syscall_linux.go syscall_linux_ppc64x.go
+// mksyscall.pl -tags linux,ppc64 syscall_linux.go syscall_linux_ppc64x.go
// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
-// +build ppc64,linux
+// +build linux,ppc64
package unix
@@ -26,8 +26,6 @@ func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags in
return
}
_, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -43,7 +41,6 @@ func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error)
return
}
r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)
- use(unsafe.Pointer(_p0))
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -77,7 +74,6 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
_p1 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
- use(unsafe.Pointer(_p0))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -99,8 +95,6 @@ func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
return
}
_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -116,7 +110,6 @@ func Unlinkat(dirfd int, path string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -132,7 +125,6 @@ func utimes(path string, times *[2]Timeval) (err error) {
return
}
_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -148,7 +140,6 @@ func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error
return
}
_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -212,7 +203,6 @@ func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {
return
}
_, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -238,9 +228,6 @@ func mount(source string, target string, fstype string, flags uintptr, data *byt
return
}
_, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
- use(unsafe.Pointer(_p2))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -256,7 +243,6 @@ func Acct(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -283,7 +269,6 @@ func Chdir(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -299,7 +284,6 @@ func Chroot(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -395,7 +379,6 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -441,7 +424,6 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -457,7 +439,6 @@ func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -562,6 +543,23 @@ func Getpriority(which int, who int) (prio int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Getrandom(buf []byte, flags int) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(buf) > 0 {
+ _p0 = unsafe.Pointer(&buf[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Getrusage(who int, rusage *Rusage) (err error) {
_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
if e1 != 0 {
@@ -609,8 +607,6 @@ func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
_p2 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
sz = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -627,7 +623,6 @@ func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err e
return
}
r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))
- use(unsafe.Pointer(_p0))
watchdesc = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -699,7 +694,6 @@ func Listxattr(path string, dest []byte) (sz int, err error) {
_p1 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))
- use(unsafe.Pointer(_p0))
sz = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -716,7 +710,6 @@ func Mkdirat(dirfd int, path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -732,7 +725,6 @@ func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -763,8 +755,6 @@ func PivotRoot(newroot string, putold string) (err error) {
return
}
_, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -822,8 +812,6 @@ func Removexattr(path string, attr string) (err error) {
return
}
_, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -844,8 +832,6 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e
return
}
_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -955,8 +941,6 @@ func Setxattr(path string, attr string, data []byte, flags int) (err error) {
_p2 = unsafe.Pointer(&_zero)
}
_, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1039,7 +1023,6 @@ func Unmount(target string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1358,7 +1341,6 @@ func Lchown(path string, uid int, gid int) (err error) {
return
}
_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1384,7 +1366,6 @@ func Lstat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1568,7 +1549,6 @@ func Stat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1584,7 +1564,6 @@ func Statfs(path string, buf *Statfs_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1610,7 +1589,6 @@ func Truncate(path string, length int64) (err error) {
return
}
_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1837,7 +1815,6 @@ func Utime(path string, buf *Utimbuf) (err error) {
return
}
_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go
index 5183711ec..f458a63ad 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go
@@ -1,7 +1,7 @@
-// mksyscall.pl syscall_linux.go syscall_linux_ppc64x.go
+// mksyscall.pl -tags linux,ppc64le syscall_linux.go syscall_linux_ppc64x.go
// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
-// +build ppc64le,linux
+// +build linux,ppc64le
package unix
@@ -26,8 +26,6 @@ func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags in
return
}
_, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -43,7 +41,6 @@ func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error)
return
}
r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)
- use(unsafe.Pointer(_p0))
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -77,7 +74,6 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
_p1 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
- use(unsafe.Pointer(_p0))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -99,8 +95,6 @@ func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
return
}
_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -116,7 +110,6 @@ func Unlinkat(dirfd int, path string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -132,7 +125,6 @@ func utimes(path string, times *[2]Timeval) (err error) {
return
}
_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -148,7 +140,6 @@ func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error
return
}
_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -212,7 +203,6 @@ func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {
return
}
_, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -238,9 +228,6 @@ func mount(source string, target string, fstype string, flags uintptr, data *byt
return
}
_, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
- use(unsafe.Pointer(_p2))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -256,7 +243,6 @@ func Acct(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -283,7 +269,6 @@ func Chdir(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -299,7 +284,6 @@ func Chroot(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -395,7 +379,6 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -441,7 +424,6 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -457,7 +439,6 @@ func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -562,6 +543,23 @@ func Getpriority(which int, who int) (prio int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Getrandom(buf []byte, flags int) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(buf) > 0 {
+ _p0 = unsafe.Pointer(&buf[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Getrusage(who int, rusage *Rusage) (err error) {
_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
if e1 != 0 {
@@ -609,8 +607,6 @@ func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
_p2 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
sz = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -627,7 +623,6 @@ func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err e
return
}
r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))
- use(unsafe.Pointer(_p0))
watchdesc = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -699,7 +694,6 @@ func Listxattr(path string, dest []byte) (sz int, err error) {
_p1 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))
- use(unsafe.Pointer(_p0))
sz = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -716,7 +710,6 @@ func Mkdirat(dirfd int, path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -732,7 +725,6 @@ func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -763,8 +755,6 @@ func PivotRoot(newroot string, putold string) (err error) {
return
}
_, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -822,8 +812,6 @@ func Removexattr(path string, attr string) (err error) {
return
}
_, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -844,8 +832,6 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e
return
}
_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -955,8 +941,6 @@ func Setxattr(path string, attr string, data []byte, flags int) (err error) {
_p2 = unsafe.Pointer(&_zero)
}
_, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1039,7 +1023,6 @@ func Unmount(target string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1358,7 +1341,6 @@ func Lchown(path string, uid int, gid int) (err error) {
return
}
_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1384,7 +1366,6 @@ func Lstat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1568,7 +1549,6 @@ func Stat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1584,7 +1564,6 @@ func Statfs(path string, buf *Statfs_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1610,7 +1589,6 @@ func Truncate(path string, length int64) (err error) {
return
}
_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1837,7 +1815,6 @@ func Utime(path string, buf *Utimbuf) (err error) {
return
}
_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go
index 4c7ed08cc..b1d5a9bc3 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go
@@ -1,7 +1,7 @@
-// mksyscall.pl syscall_linux.go syscall_linux_s390x.go
+// mksyscall.pl -tags linux,s390x syscall_linux.go syscall_linux_s390x.go
// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
-// +build s390x,linux
+// +build linux,s390x
package unix
@@ -26,8 +26,6 @@ func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags in
return
}
_, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -43,7 +41,6 @@ func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error)
return
}
r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)
- use(unsafe.Pointer(_p0))
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -77,7 +74,6 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
_p1 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
- use(unsafe.Pointer(_p0))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -99,8 +95,6 @@ func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
return
}
_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -116,7 +110,6 @@ func Unlinkat(dirfd int, path string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -132,7 +125,6 @@ func utimes(path string, times *[2]Timeval) (err error) {
return
}
_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -148,7 +140,6 @@ func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error
return
}
_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -212,7 +203,6 @@ func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {
return
}
_, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -238,9 +228,6 @@ func mount(source string, target string, fstype string, flags uintptr, data *byt
return
}
_, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
- use(unsafe.Pointer(_p2))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -256,7 +243,6 @@ func Acct(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -283,7 +269,6 @@ func Chdir(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -299,7 +284,6 @@ func Chroot(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -395,7 +379,6 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -441,7 +424,6 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -457,7 +439,6 @@ func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -562,6 +543,23 @@ func Getpriority(which int, who int) (prio int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Getrandom(buf []byte, flags int) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(buf) > 0 {
+ _p0 = unsafe.Pointer(&buf[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Getrusage(who int, rusage *Rusage) (err error) {
_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
if e1 != 0 {
@@ -609,8 +607,6 @@ func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
_p2 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
sz = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -627,7 +623,6 @@ func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err e
return
}
r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))
- use(unsafe.Pointer(_p0))
watchdesc = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -699,7 +694,6 @@ func Listxattr(path string, dest []byte) (sz int, err error) {
_p1 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))
- use(unsafe.Pointer(_p0))
sz = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -716,7 +710,6 @@ func Mkdirat(dirfd int, path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -732,7 +725,6 @@ func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -763,8 +755,6 @@ func PivotRoot(newroot string, putold string) (err error) {
return
}
_, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -822,8 +812,6 @@ func Removexattr(path string, attr string) (err error) {
return
}
_, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -844,8 +832,6 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e
return
}
_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -955,8 +941,6 @@ func Setxattr(path string, attr string, data []byte, flags int) (err error) {
_p2 = unsafe.Pointer(&_zero)
}
_, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1039,7 +1023,6 @@ func Unmount(target string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1348,7 +1331,6 @@ func Lchown(path string, uid int, gid int) (err error) {
return
}
_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1364,7 +1346,6 @@ func Lstat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1538,7 +1519,6 @@ func Stat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1554,7 +1534,6 @@ func Statfs(path string, buf *Statfs_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1580,7 +1559,6 @@ func Truncate(path string, length int64) (err error) {
return
}
_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1627,7 +1605,6 @@ func Utime(path string, buf *Utimbuf) (err error) {
return
}
_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go
index beb83e4fd..ce3ec585b 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go
@@ -1,7 +1,7 @@
-// mksyscall.pl syscall_linux.go syscall_linux_sparc64.go
+// mksyscall.pl -tags linux,sparc64 syscall_linux.go syscall_linux_sparc64.go
// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
-// +build sparc64,linux
+// +build linux,sparc64
package unix
@@ -26,8 +26,6 @@ func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags in
return
}
_, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -43,7 +41,6 @@ func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error)
return
}
r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)
- use(unsafe.Pointer(_p0))
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -77,7 +74,6 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
_p1 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
- use(unsafe.Pointer(_p0))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -99,8 +95,6 @@ func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
return
}
_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -116,7 +110,6 @@ func Unlinkat(dirfd int, path string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -132,7 +125,6 @@ func utimes(path string, times *[2]Timeval) (err error) {
return
}
_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -148,7 +140,6 @@ func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error
return
}
_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -212,7 +203,6 @@ func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {
return
}
_, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -238,9 +228,6 @@ func mount(source string, target string, fstype string, flags uintptr, data *byt
return
}
_, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
- use(unsafe.Pointer(_p2))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -256,7 +243,6 @@ func Acct(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -283,7 +269,6 @@ func Chdir(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -299,7 +284,6 @@ func Chroot(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -395,7 +379,6 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -441,7 +424,6 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -457,7 +439,6 @@ func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -562,6 +543,23 @@ func Getpriority(which int, who int) (prio int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Getrandom(buf []byte, flags int) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(buf) > 0 {
+ _p0 = unsafe.Pointer(&buf[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Getrusage(who int, rusage *Rusage) (err error) {
_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
if e1 != 0 {
@@ -609,8 +607,6 @@ func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
_p2 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
sz = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -627,7 +623,6 @@ func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err e
return
}
r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))
- use(unsafe.Pointer(_p0))
watchdesc = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -699,7 +694,6 @@ func Listxattr(path string, dest []byte) (sz int, err error) {
_p1 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))
- use(unsafe.Pointer(_p0))
sz = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -716,7 +710,6 @@ func Mkdirat(dirfd int, path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -732,7 +725,6 @@ func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
return
}
_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -763,8 +755,6 @@ func PivotRoot(newroot string, putold string) (err error) {
return
}
_, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -822,8 +812,6 @@ func Removexattr(path string, attr string) (err error) {
return
}
_, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -844,8 +832,6 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e
return
}
_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -955,8 +941,6 @@ func Setxattr(path string, attr string, data []byte, flags int) (err error) {
_p2 = unsafe.Pointer(&_zero)
}
_, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1039,7 +1023,6 @@ func Unmount(target string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1338,7 +1321,6 @@ func Lchown(path string, uid int, gid int) (err error) {
return
}
_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1364,7 +1346,6 @@ func Lstat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1548,7 +1529,6 @@ func Stat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1564,7 +1544,6 @@ func Statfs(path string, buf *Statfs_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1590,7 +1569,6 @@ func Truncate(path string, length int64) (err error) {
return
}
_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1806,7 +1784,6 @@ func Utime(path string, buf *Utimbuf) (err error) {
return
}
_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go
index b16e1d0ee..3182345ec 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go
@@ -1,7 +1,7 @@
-// mksyscall.pl -l32 -netbsd syscall_bsd.go syscall_netbsd.go syscall_netbsd_386.go
+// mksyscall.pl -l32 -netbsd -tags netbsd,386 syscall_bsd.go syscall_netbsd.go syscall_netbsd_386.go
// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
-// +build 386,netbsd
+// +build netbsd,386
package unix
@@ -222,7 +222,6 @@ func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr)
_p0 = unsafe.Pointer(&_zero)
}
_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
- use(_p0)
if e1 != 0 {
err = errnoErr(e1)
}
@@ -238,7 +237,6 @@ func utimes(path string, timeval *[2]Timeval) (err error) {
return
}
_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -304,7 +302,6 @@ func Access(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -330,7 +327,6 @@ func Chdir(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -346,7 +342,6 @@ func Chflags(path string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -362,7 +357,6 @@ func Chmod(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -378,7 +372,6 @@ func Chown(path string, uid int, gid int) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -394,7 +387,6 @@ func Chroot(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -687,7 +679,6 @@ func Lchown(path string, uid int, gid int) (err error) {
return
}
_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -708,8 +699,6 @@ func Link(path string, link string) (err error) {
return
}
_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -735,7 +724,6 @@ func Lstat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -751,7 +739,6 @@ func Mkdir(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -767,7 +754,6 @@ func Mkfifo(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -783,7 +769,6 @@ func Mknod(path string, mode uint32, dev int) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -877,7 +862,6 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
return
}
r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
- use(unsafe.Pointer(_p0))
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -894,7 +878,6 @@ func Pathconf(path string, name int) (val int, err error) {
return
}
r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
- use(unsafe.Pointer(_p0))
val = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -968,7 +951,6 @@ func Readlink(path string, buf []byte) (n int, err error) {
_p1 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
- use(unsafe.Pointer(_p0))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -990,8 +972,6 @@ func Rename(from string, to string) (err error) {
return
}
_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1007,7 +987,6 @@ func Revoke(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1023,7 +1002,6 @@ func Rmdir(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1171,7 +1149,6 @@ func Stat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1192,8 +1169,6 @@ func Symlink(path string, link string) (err error) {
return
}
_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1219,7 +1194,6 @@ func Truncate(path string, length int64) (err error) {
return
}
_, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1243,7 +1217,6 @@ func Unlink(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1259,7 +1232,6 @@ func Unmount(path string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go
index b63667da9..74ba8189a 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go
@@ -1,7 +1,7 @@
-// mksyscall.pl -netbsd syscall_bsd.go syscall_netbsd.go syscall_netbsd_amd64.go
+// mksyscall.pl -netbsd -tags netbsd,amd64 syscall_bsd.go syscall_netbsd.go syscall_netbsd_amd64.go
// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
-// +build amd64,netbsd
+// +build netbsd,amd64
package unix
@@ -222,7 +222,6 @@ func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr)
_p0 = unsafe.Pointer(&_zero)
}
_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
- use(_p0)
if e1 != 0 {
err = errnoErr(e1)
}
@@ -238,7 +237,6 @@ func utimes(path string, timeval *[2]Timeval) (err error) {
return
}
_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -304,7 +302,6 @@ func Access(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -330,7 +327,6 @@ func Chdir(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -346,7 +342,6 @@ func Chflags(path string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -362,7 +357,6 @@ func Chmod(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -378,7 +372,6 @@ func Chown(path string, uid int, gid int) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -394,7 +387,6 @@ func Chroot(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -687,7 +679,6 @@ func Lchown(path string, uid int, gid int) (err error) {
return
}
_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -708,8 +699,6 @@ func Link(path string, link string) (err error) {
return
}
_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -735,7 +724,6 @@ func Lstat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -751,7 +739,6 @@ func Mkdir(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -767,7 +754,6 @@ func Mkfifo(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -783,7 +769,6 @@ func Mknod(path string, mode uint32, dev int) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -877,7 +862,6 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
return
}
r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
- use(unsafe.Pointer(_p0))
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -894,7 +878,6 @@ func Pathconf(path string, name int) (val int, err error) {
return
}
r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
- use(unsafe.Pointer(_p0))
val = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -968,7 +951,6 @@ func Readlink(path string, buf []byte) (n int, err error) {
_p1 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
- use(unsafe.Pointer(_p0))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -990,8 +972,6 @@ func Rename(from string, to string) (err error) {
return
}
_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1007,7 +987,6 @@ func Revoke(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1023,7 +1002,6 @@ func Rmdir(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1171,7 +1149,6 @@ func Stat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1192,8 +1169,6 @@ func Symlink(path string, link string) (err error) {
return
}
_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1219,7 +1194,6 @@ func Truncate(path string, length int64) (err error) {
return
}
_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1243,7 +1217,6 @@ func Unlink(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1259,7 +1232,6 @@ func Unmount(path string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go
index b0d19038d..1f346e2f5 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go
@@ -1,7 +1,7 @@
-// mksyscall.pl -l32 -arm syscall_bsd.go syscall_netbsd.go syscall_netbsd_arm.go
+// mksyscall.pl -l32 -arm -tags netbsd,arm syscall_bsd.go syscall_netbsd.go syscall_netbsd_arm.go
// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
-// +build arm,netbsd
+// +build netbsd,arm
package unix
@@ -222,7 +222,6 @@ func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr)
_p0 = unsafe.Pointer(&_zero)
}
_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
- use(_p0)
if e1 != 0 {
err = errnoErr(e1)
}
@@ -238,7 +237,6 @@ func utimes(path string, timeval *[2]Timeval) (err error) {
return
}
_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -304,7 +302,6 @@ func Access(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -330,7 +327,6 @@ func Chdir(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -346,7 +342,6 @@ func Chflags(path string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -362,7 +357,6 @@ func Chmod(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -378,7 +372,6 @@ func Chown(path string, uid int, gid int) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -394,7 +387,6 @@ func Chroot(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -687,7 +679,6 @@ func Lchown(path string, uid int, gid int) (err error) {
return
}
_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -708,8 +699,6 @@ func Link(path string, link string) (err error) {
return
}
_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -735,7 +724,6 @@ func Lstat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -751,7 +739,6 @@ func Mkdir(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -767,7 +754,6 @@ func Mkfifo(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -783,7 +769,6 @@ func Mknod(path string, mode uint32, dev int) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -877,7 +862,6 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
return
}
r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
- use(unsafe.Pointer(_p0))
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -894,7 +878,6 @@ func Pathconf(path string, name int) (val int, err error) {
return
}
r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
- use(unsafe.Pointer(_p0))
val = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -968,7 +951,6 @@ func Readlink(path string, buf []byte) (n int, err error) {
_p1 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
- use(unsafe.Pointer(_p0))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -990,8 +972,6 @@ func Rename(from string, to string) (err error) {
return
}
_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1007,7 +987,6 @@ func Revoke(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1023,7 +1002,6 @@ func Rmdir(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1171,7 +1149,6 @@ func Stat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1192,8 +1169,6 @@ func Symlink(path string, link string) (err error) {
return
}
_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1219,7 +1194,6 @@ func Truncate(path string, length int64) (err error) {
return
}
_, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1243,7 +1217,6 @@ func Unlink(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1259,7 +1232,6 @@ func Unmount(path string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go
index f91a5b856..ca3e81392 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go
@@ -1,7 +1,7 @@
-// mksyscall.pl -l32 -openbsd syscall_bsd.go syscall_openbsd.go syscall_openbsd_386.go
+// mksyscall.pl -l32 -openbsd -tags openbsd,386 syscall_bsd.go syscall_openbsd.go syscall_openbsd_386.go
// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
-// +build 386,openbsd
+// +build openbsd,386
package unix
@@ -222,7 +222,6 @@ func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr)
_p0 = unsafe.Pointer(&_zero)
}
_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
- use(_p0)
if e1 != 0 {
err = errnoErr(e1)
}
@@ -238,7 +237,6 @@ func utimes(path string, timeval *[2]Timeval) (err error) {
return
}
_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -302,7 +300,6 @@ func Access(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -328,7 +325,6 @@ func Chdir(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -344,7 +340,6 @@ func Chflags(path string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -360,7 +355,6 @@ func Chmod(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -376,7 +370,6 @@ func Chown(path string, uid int, gid int) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -392,7 +385,6 @@ func Chroot(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -695,7 +687,6 @@ func Lchown(path string, uid int, gid int) (err error) {
return
}
_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -716,8 +707,6 @@ func Link(path string, link string) (err error) {
return
}
_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -743,7 +732,6 @@ func Lstat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -759,7 +747,6 @@ func Mkdir(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -775,7 +762,6 @@ func Mkfifo(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -791,7 +777,6 @@ func Mknod(path string, mode uint32, dev int) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -885,7 +870,6 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
return
}
r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
- use(unsafe.Pointer(_p0))
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -902,7 +886,6 @@ func Pathconf(path string, name int) (val int, err error) {
return
}
r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
- use(unsafe.Pointer(_p0))
val = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -976,7 +959,6 @@ func Readlink(path string, buf []byte) (n int, err error) {
_p1 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
- use(unsafe.Pointer(_p0))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -998,8 +980,6 @@ func Rename(from string, to string) (err error) {
return
}
_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1015,7 +995,6 @@ func Revoke(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1031,7 +1010,6 @@ func Rmdir(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1098,7 +1076,6 @@ func Setlogin(name string) (err error) {
return
}
_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1215,7 +1192,6 @@ func Stat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1231,7 +1207,6 @@ func Statfs(path string, stat *Statfs_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1252,8 +1227,6 @@ func Symlink(path string, link string) (err error) {
return
}
_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1279,7 +1252,6 @@ func Truncate(path string, length int64) (err error) {
return
}
_, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1303,7 +1275,6 @@ func Unlink(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1319,7 +1290,6 @@ func Unmount(path string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go
index 2e8d59d72..bf63d552e 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go
@@ -1,7 +1,7 @@
-// mksyscall.pl -openbsd syscall_bsd.go syscall_openbsd.go syscall_openbsd_amd64.go
+// mksyscall.pl -openbsd -tags openbsd,amd64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_amd64.go
// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
-// +build amd64,openbsd
+// +build openbsd,amd64
package unix
@@ -222,7 +222,6 @@ func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr)
_p0 = unsafe.Pointer(&_zero)
}
_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
- use(_p0)
if e1 != 0 {
err = errnoErr(e1)
}
@@ -238,7 +237,6 @@ func utimes(path string, timeval *[2]Timeval) (err error) {
return
}
_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -302,7 +300,6 @@ func Access(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -328,7 +325,6 @@ func Chdir(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -344,7 +340,6 @@ func Chflags(path string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -360,7 +355,6 @@ func Chmod(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -376,7 +370,6 @@ func Chown(path string, uid int, gid int) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -392,7 +385,6 @@ func Chroot(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -695,7 +687,6 @@ func Lchown(path string, uid int, gid int) (err error) {
return
}
_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -716,8 +707,6 @@ func Link(path string, link string) (err error) {
return
}
_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -743,7 +732,6 @@ func Lstat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -759,7 +747,6 @@ func Mkdir(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -775,7 +762,6 @@ func Mkfifo(path string, mode uint32) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -791,7 +777,6 @@ func Mknod(path string, mode uint32, dev int) (err error) {
return
}
_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -885,7 +870,6 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
return
}
r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
- use(unsafe.Pointer(_p0))
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -902,7 +886,6 @@ func Pathconf(path string, name int) (val int, err error) {
return
}
r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
- use(unsafe.Pointer(_p0))
val = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -976,7 +959,6 @@ func Readlink(path string, buf []byte) (n int, err error) {
_p1 = unsafe.Pointer(&_zero)
}
r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
- use(unsafe.Pointer(_p0))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -998,8 +980,6 @@ func Rename(from string, to string) (err error) {
return
}
_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1015,7 +995,6 @@ func Revoke(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1031,7 +1010,6 @@ func Rmdir(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1098,7 +1076,6 @@ func Setlogin(name string) (err error) {
return
}
_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1215,7 +1192,6 @@ func Stat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1231,7 +1207,6 @@ func Statfs(path string, stat *Statfs_t) (err error) {
return
}
_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1252,8 +1227,6 @@ func Symlink(path string, link string) (err error) {
return
}
_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1279,7 +1252,6 @@ func Truncate(path string, length int64) (err error) {
return
}
_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length))
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1303,7 +1275,6 @@ func Unlink(path string) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1319,7 +1290,6 @@ func Unmount(path string, flags int) (err error) {
return
}
_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = errnoErr(e1)
}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go
index c0ecfc044..bdf140b18 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go
@@ -1,7 +1,7 @@
-// mksyscall_solaris.pl syscall_solaris.go syscall_solaris_amd64.go
+// mksyscall_solaris.pl -tags solaris,amd64 syscall_solaris.go syscall_solaris_amd64.go
// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
-// +build amd64,solaris
+// +build solaris,amd64
package unix
@@ -442,7 +442,6 @@ func utimes(path string, times *[2]Timeval) (err error) {
return
}
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procutimes)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0, 0, 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = e1
}
@@ -456,7 +455,6 @@ func utimensat(fd int, path string, times *[2]Timespec, flag int) (err error) {
return
}
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procutimensat)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flag), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = e1
}
@@ -530,7 +528,6 @@ func Access(path string, mode uint32) (err error) {
return
}
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procAccess)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = e1
}
@@ -552,7 +549,6 @@ func Chdir(path string) (err error) {
return
}
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChdir)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = e1
}
@@ -566,7 +562,6 @@ func Chmod(path string, mode uint32) (err error) {
return
}
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChmod)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = e1
}
@@ -580,7 +575,6 @@ func Chown(path string, uid int, gid int) (err error) {
return
}
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChown)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), 0, 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = e1
}
@@ -594,7 +588,6 @@ func Chroot(path string) (err error) {
return
}
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChroot)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = e1
}
@@ -616,7 +609,6 @@ func Creat(path string, mode uint32) (fd int, err error) {
return
}
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procCreat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0)
- use(unsafe.Pointer(_p0))
fd = int(r0)
if e1 != 0 {
err = e1
@@ -669,7 +661,6 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
return
}
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchmodat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = e1
}
@@ -691,7 +682,6 @@ func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
return
}
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchownat)), 5, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = e1
}
@@ -838,7 +828,6 @@ func Lchown(path string, uid int, gid int) (err error) {
return
}
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procLchown)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), 0, 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = e1
}
@@ -857,8 +846,6 @@ func Link(path string, link string) (err error) {
return
}
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procLink)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0, 0, 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = e1
}
@@ -880,7 +867,6 @@ func Lstat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procLstat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = e1
}
@@ -906,7 +892,6 @@ func Mkdir(path string, mode uint32) (err error) {
return
}
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkdir)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = e1
}
@@ -920,7 +905,6 @@ func Mkdirat(dirfd int, path string, mode uint32) (err error) {
return
}
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkdirat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = e1
}
@@ -934,7 +918,6 @@ func Mkfifo(path string, mode uint32) (err error) {
return
}
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkfifo)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = e1
}
@@ -948,7 +931,6 @@ func Mkfifoat(dirfd int, path string, mode uint32) (err error) {
return
}
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkfifoat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = e1
}
@@ -962,7 +944,6 @@ func Mknod(path string, mode uint32, dev int) (err error) {
return
}
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMknod)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = e1
}
@@ -976,7 +957,6 @@ func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
return
}
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMknodat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = e1
}
@@ -1050,7 +1030,6 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
return
}
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procOpen)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0, 0)
- use(unsafe.Pointer(_p0))
fd = int(r0)
if e1 != 0 {
err = e1
@@ -1065,7 +1044,6 @@ func Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error)
return
}
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procOpenat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)
- use(unsafe.Pointer(_p0))
fd = int(r0)
if e1 != 0 {
err = e1
@@ -1080,7 +1058,6 @@ func Pathconf(path string, name int) (val int, err error) {
return
}
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPathconf)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0, 0, 0, 0)
- use(unsafe.Pointer(_p0))
val = int(r0)
if e1 != 0 {
err = e1
@@ -1146,7 +1123,6 @@ func Readlink(path string, buf []byte) (n int, err error) {
_p1 = &buf[0]
}
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procReadlink)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(len(buf)), 0, 0, 0)
- use(unsafe.Pointer(_p0))
n = int(r0)
if e1 != 0 {
err = e1
@@ -1166,8 +1142,6 @@ func Rename(from string, to string) (err error) {
return
}
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRename)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0, 0, 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = e1
}
@@ -1186,8 +1160,6 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e
return
}
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRenameat)), 4, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = e1
}
@@ -1201,7 +1173,6 @@ func Rmdir(path string) (err error) {
return
}
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRmdir)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = e1
}
@@ -1325,7 +1296,6 @@ func Stat(path string, stat *Stat_t) (err error) {
return
}
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procStat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = e1
}
@@ -1344,8 +1314,6 @@ func Symlink(path string, link string) (err error) {
return
}
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSymlink)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0, 0, 0)
- use(unsafe.Pointer(_p0))
- use(unsafe.Pointer(_p1))
if e1 != 0 {
err = e1
}
@@ -1376,7 +1344,6 @@ func Truncate(path string, length int64) (err error) {
return
}
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procTruncate)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0, 0, 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = e1
}
@@ -1420,7 +1387,6 @@ func Unmount(target string, flags int) (err error) {
return
}
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procumount)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0, 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = e1
}
@@ -1434,7 +1400,6 @@ func Unlink(path string) (err error) {
return
}
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUnlink)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = e1
}
@@ -1448,7 +1413,6 @@ func Unlinkat(dirfd int, path string, flags int) (err error) {
return
}
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUnlinkat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = e1
}
@@ -1470,7 +1434,6 @@ func Utime(path string, buf *Utimbuf) (err error) {
return
}
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUtime)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0, 0, 0, 0)
- use(unsafe.Pointer(_p0))
if e1 != 0 {
err = e1
}
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go
index ba952c675..206b3c281 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go
@@ -1,4 +1,4 @@
-// mksysnum_linux.pl /usr/include/asm/unistd_32.h
+// mksysnum_linux.pl -Ilinux/usr/include -m32 -D__i386__ linux/usr/include/asm/unistd.h
// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
// +build 386,linux
@@ -226,7 +226,6 @@ const (
SYS_PIVOT_ROOT = 217
SYS_MINCORE = 218
SYS_MADVISE = 219
- SYS_MADVISE1 = 219
SYS_GETDENTS64 = 220
SYS_FCNTL64 = 221
SYS_GETTID = 224
@@ -352,4 +351,38 @@ const (
SYS_SETNS = 346
SYS_PROCESS_VM_READV = 347
SYS_PROCESS_VM_WRITEV = 348
+ SYS_KCMP = 349
+ SYS_FINIT_MODULE = 350
+ SYS_SCHED_SETATTR = 351
+ SYS_SCHED_GETATTR = 352
+ SYS_RENAMEAT2 = 353
+ SYS_SECCOMP = 354
+ SYS_GETRANDOM = 355
+ SYS_MEMFD_CREATE = 356
+ SYS_BPF = 357
+ SYS_EXECVEAT = 358
+ SYS_SOCKET = 359
+ SYS_SOCKETPAIR = 360
+ SYS_BIND = 361
+ SYS_CONNECT = 362
+ SYS_LISTEN = 363
+ SYS_ACCEPT4 = 364
+ SYS_GETSOCKOPT = 365
+ SYS_SETSOCKOPT = 366
+ SYS_GETSOCKNAME = 367
+ SYS_GETPEERNAME = 368
+ SYS_SENDTO = 369
+ SYS_SENDMSG = 370
+ SYS_RECVFROM = 371
+ SYS_RECVMSG = 372
+ SYS_SHUTDOWN = 373
+ SYS_USERFAULTFD = 374
+ SYS_MEMBARRIER = 375
+ SYS_MLOCK2 = 376
+ SYS_COPY_FILE_RANGE = 377
+ SYS_PREADV2 = 378
+ SYS_PWRITEV2 = 379
+ SYS_PKEY_MPROTECT = 380
+ SYS_PKEY_ALLOC = 381
+ SYS_PKEY_FREE = 382
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go
index ddac31f58..904231736 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go
@@ -1,4 +1,4 @@
-// mksysnum_linux.pl /usr/include/asm/unistd_64.h
+// mksysnum_linux.pl -Ilinux/usr/include -m64 linux/usr/include/asm/unistd.h
// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
// +build amd64,linux
@@ -318,4 +318,24 @@ const (
SYS_GETCPU = 309
SYS_PROCESS_VM_READV = 310
SYS_PROCESS_VM_WRITEV = 311
+ SYS_KCMP = 312
+ SYS_FINIT_MODULE = 313
+ SYS_SCHED_SETATTR = 314
+ SYS_SCHED_GETATTR = 315
+ SYS_RENAMEAT2 = 316
+ SYS_SECCOMP = 317
+ SYS_GETRANDOM = 318
+ SYS_MEMFD_CREATE = 319
+ SYS_KEXEC_FILE_LOAD = 320
+ SYS_BPF = 321
+ SYS_EXECVEAT = 322
+ SYS_USERFAULTFD = 323
+ SYS_MEMBARRIER = 324
+ SYS_MLOCK2 = 325
+ SYS_COPY_FILE_RANGE = 326
+ SYS_PREADV2 = 327
+ SYS_PWRITEV2 = 328
+ SYS_PKEY_MPROTECT = 329
+ SYS_PKEY_ALLOC = 330
+ SYS_PKEY_FREE = 331
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go
index 45ced17fc..e3e674562 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go
@@ -1,4 +1,4 @@
-// mksysnum_linux.pl
+// mksysnum_linux.pl -Ilinux/usr/include -m32 -D__ARM_EABI__ linux/usr/include/asm/unistd.h
// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
// +build arm,linux
@@ -6,8 +6,6 @@
package unix
const (
- SYS_OABI_SYSCALL_BASE = 0
- SYS_SYSCALL_BASE = 0
SYS_RESTART_SYSCALL = 0
SYS_EXIT = 1
SYS_FORK = 2
@@ -20,21 +18,16 @@ const (
SYS_UNLINK = 10
SYS_EXECVE = 11
SYS_CHDIR = 12
- SYS_TIME = 13
SYS_MKNOD = 14
SYS_CHMOD = 15
SYS_LCHOWN = 16
SYS_LSEEK = 19
SYS_GETPID = 20
SYS_MOUNT = 21
- SYS_UMOUNT = 22
SYS_SETUID = 23
SYS_GETUID = 24
- SYS_STIME = 25
SYS_PTRACE = 26
- SYS_ALARM = 27
SYS_PAUSE = 29
- SYS_UTIME = 30
SYS_ACCESS = 33
SYS_NICE = 34
SYS_SYNC = 36
@@ -69,20 +62,16 @@ const (
SYS_SIGPENDING = 73
SYS_SETHOSTNAME = 74
SYS_SETRLIMIT = 75
- SYS_GETRLIMIT = 76
SYS_GETRUSAGE = 77
SYS_GETTIMEOFDAY = 78
SYS_SETTIMEOFDAY = 79
SYS_GETGROUPS = 80
SYS_SETGROUPS = 81
- SYS_SELECT = 82
SYS_SYMLINK = 83
SYS_READLINK = 85
SYS_USELIB = 86
SYS_SWAPON = 87
SYS_REBOOT = 88
- SYS_READDIR = 89
- SYS_MMAP = 90
SYS_MUNMAP = 91
SYS_TRUNCATE = 92
SYS_FTRUNCATE = 93
@@ -92,7 +81,6 @@ const (
SYS_SETPRIORITY = 97
SYS_STATFS = 99
SYS_FSTATFS = 100
- SYS_SOCKETCALL = 102
SYS_SYSLOG = 103
SYS_SETITIMER = 104
SYS_GETITIMER = 105
@@ -100,11 +88,9 @@ const (
SYS_LSTAT = 107
SYS_FSTAT = 108
SYS_VHANGUP = 111
- SYS_SYSCALL = 113
SYS_WAIT4 = 114
SYS_SWAPOFF = 115
SYS_SYSINFO = 116
- SYS_IPC = 117
SYS_FSYNC = 118
SYS_SIGRETURN = 119
SYS_CLONE = 120
@@ -353,4 +339,23 @@ const (
SYS_SETNS = 375
SYS_PROCESS_VM_READV = 376
SYS_PROCESS_VM_WRITEV = 377
+ SYS_KCMP = 378
+ SYS_FINIT_MODULE = 379
+ SYS_SCHED_SETATTR = 380
+ SYS_SCHED_GETATTR = 381
+ SYS_RENAMEAT2 = 382
+ SYS_SECCOMP = 383
+ SYS_GETRANDOM = 384
+ SYS_MEMFD_CREATE = 385
+ SYS_BPF = 386
+ SYS_EXECVEAT = 387
+ SYS_USERFAULTFD = 388
+ SYS_MEMBARRIER = 389
+ SYS_MLOCK2 = 390
+ SYS_COPY_FILE_RANGE = 391
+ SYS_PREADV2 = 392
+ SYS_PWRITEV2 = 393
+ SYS_PKEY_MPROTECT = 394
+ SYS_PKEY_ALLOC = 395
+ SYS_PKEY_FREE = 396
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go
index 2e9514f28..90e43d006 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go
@@ -1,4 +1,4 @@
-// mksysnum_linux.pl /usr/include/asm-generic/unistd.h
+// mksysnum_linux.pl -Ilinux/usr/include -m64 linux/usr/include/asm/unistd.h
// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
// +build arm64,linux
@@ -269,4 +269,17 @@ const (
SYS_SCHED_GETATTR = 275
SYS_RENAMEAT2 = 276
SYS_SECCOMP = 277
+ SYS_GETRANDOM = 278
+ SYS_MEMFD_CREATE = 279
+ SYS_BPF = 280
+ SYS_EXECVEAT = 281
+ SYS_USERFAULTFD = 282
+ SYS_MEMBARRIER = 283
+ SYS_MLOCK2 = 284
+ SYS_COPY_FILE_RANGE = 285
+ SYS_PREADV2 = 286
+ SYS_PWRITEV2 = 287
+ SYS_PKEY_MPROTECT = 288
+ SYS_PKEY_ALLOC = 289
+ SYS_PKEY_FREE = 290
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go
index 0786867e9..77ff644d7 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go
@@ -1,4 +1,4 @@
-// mksysnum_linux.pl /usr/include/mips-linux-gnu/asm/unistd.h
+// mksysnum_linux.pl -Ilinux/usr/include -m32 -D_MIPS_SIM=_MIPS_SIM_ABI32 -D__MIPSEB__ linux/usr/include/asm/unistd.h
// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
// +build mips,linux
@@ -352,8 +352,23 @@ const (
SYS_SETNS = 4344
SYS_PROCESS_VM_READV = 4345
SYS_PROCESS_VM_WRITEV = 4346
- SYS_LINUX_SYSCALLS = 4346
- SYS_O32_LINUX_SYSCALLS = 4346
- SYS_64_LINUX_SYSCALLS = 4305
- SYS_N32_LINUX_SYSCALLS = 4310
+ SYS_KCMP = 4347
+ SYS_FINIT_MODULE = 4348
+ SYS_SCHED_SETATTR = 4349
+ SYS_SCHED_GETATTR = 4350
+ SYS_RENAMEAT2 = 4351
+ SYS_SECCOMP = 4352
+ SYS_GETRANDOM = 4353
+ SYS_MEMFD_CREATE = 4354
+ SYS_BPF = 4355
+ SYS_EXECVEAT = 4356
+ SYS_USERFAULTFD = 4357
+ SYS_MEMBARRIER = 4358
+ SYS_MLOCK2 = 4359
+ SYS_COPY_FILE_RANGE = 4360
+ SYS_PREADV2 = 4361
+ SYS_PWRITEV2 = 4362
+ SYS_PKEY_MPROTECT = 4363
+ SYS_PKEY_ALLOC = 4364
+ SYS_PKEY_FREE = 4365
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go
index 5ffe1c719..fc86fcdb6 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go
@@ -1,4 +1,4 @@
-// mksysnum_linux.pl /usr/include/asm/unistd.h
+// mksysnum_linux.pl -Ilinux/usr/include -m64 -D_MIPS_SIM=_MIPS_SIM_ABI64 -D__MIPSEB__ linux/usr/include/asm/unistd.h
// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
// +build mips64,linux
@@ -324,4 +324,11 @@ const (
SYS_EXECVEAT = 5316
SYS_USERFAULTFD = 5317
SYS_MEMBARRIER = 5318
+ SYS_MLOCK2 = 5319
+ SYS_COPY_FILE_RANGE = 5320
+ SYS_PREADV2 = 5321
+ SYS_PWRITEV2 = 5322
+ SYS_PKEY_MPROTECT = 5323
+ SYS_PKEY_ALLOC = 5324
+ SYS_PKEY_FREE = 5325
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go
index d192b940c..993873c37 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go
@@ -1,4 +1,4 @@
-// mksysnum_linux.pl /usr/include/asm/unistd.h
+// mksysnum_linux.pl -Ilinux/usr/include -m64 -D_MIPS_SIM=_MIPS_SIM_ABI64 -D__MIPSEL__ linux/usr/include/asm/unistd.h
// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
// +build mips64le,linux
@@ -324,4 +324,11 @@ const (
SYS_EXECVEAT = 5316
SYS_USERFAULTFD = 5317
SYS_MEMBARRIER = 5318
+ SYS_MLOCK2 = 5319
+ SYS_COPY_FILE_RANGE = 5320
+ SYS_PREADV2 = 5321
+ SYS_PWRITEV2 = 5322
+ SYS_PKEY_MPROTECT = 5323
+ SYS_PKEY_ALLOC = 5324
+ SYS_PKEY_FREE = 5325
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go
index 25d231708..f0155ba5a 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go
@@ -1,4 +1,4 @@
-// mksysnum_linux.pl /usr/include/mips-linux-gnu/asm/unistd.h
+// mksysnum_linux.pl -Ilinux/usr/include -m32 -D_MIPS_SIM=_MIPS_SIM_ABI32 -D__MIPSEL__ linux/usr/include/asm/unistd.h
// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
// +build mipsle,linux
@@ -352,8 +352,23 @@ const (
SYS_SETNS = 4344
SYS_PROCESS_VM_READV = 4345
SYS_PROCESS_VM_WRITEV = 4346
- SYS_LINUX_SYSCALLS = 4346
- SYS_O32_LINUX_SYSCALLS = 4346
- SYS_64_LINUX_SYSCALLS = 4305
- SYS_N32_LINUX_SYSCALLS = 4310
+ SYS_KCMP = 4347
+ SYS_FINIT_MODULE = 4348
+ SYS_SCHED_SETATTR = 4349
+ SYS_SCHED_GETATTR = 4350
+ SYS_RENAMEAT2 = 4351
+ SYS_SECCOMP = 4352
+ SYS_GETRANDOM = 4353
+ SYS_MEMFD_CREATE = 4354
+ SYS_BPF = 4355
+ SYS_EXECVEAT = 4356
+ SYS_USERFAULTFD = 4357
+ SYS_MEMBARRIER = 4358
+ SYS_MLOCK2 = 4359
+ SYS_COPY_FILE_RANGE = 4360
+ SYS_PREADV2 = 4361
+ SYS_PWRITEV2 = 4362
+ SYS_PKEY_MPROTECT = 4363
+ SYS_PKEY_ALLOC = 4364
+ SYS_PKEY_FREE = 4365
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go
index e1b08f00d..0deec82c7 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go
@@ -1,4 +1,4 @@
-// mksysnum_linux.pl /usr/include/asm/unistd.h
+// mksysnum_linux.pl -Ilinux/usr/include -m64 -D__powerpc64__ linux/usr/include/asm/unistd.h
// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
// +build ppc64,linux
@@ -357,4 +357,13 @@ const (
SYS_GETRANDOM = 359
SYS_MEMFD_CREATE = 360
SYS_BPF = 361
+ SYS_EXECVEAT = 362
+ SYS_SWITCH_ENDIAN = 363
+ SYS_USERFAULTFD = 364
+ SYS_MEMBARRIER = 365
+ SYS_MLOCK2 = 378
+ SYS_COPY_FILE_RANGE = 379
+ SYS_PREADV2 = 380
+ SYS_PWRITEV2 = 381
+ SYS_KEXEC_FILE_LOAD = 382
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go
index 45e63f51a..3f701be7c 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go
@@ -1,4 +1,4 @@
-// mksysnum_linux.pl /usr/include/powerpc64le-linux-gnu/asm/unistd.h
+// mksysnum_linux.pl -Ilinux/usr/include -m64 -D__powerpc64__ linux/usr/include/asm/unistd.h
// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
// +build ppc64le,linux
@@ -350,4 +350,20 @@ const (
SYS_PROCESS_VM_WRITEV = 352
SYS_FINIT_MODULE = 353
SYS_KCMP = 354
+ SYS_SCHED_SETATTR = 355
+ SYS_SCHED_GETATTR = 356
+ SYS_RENAMEAT2 = 357
+ SYS_SECCOMP = 358
+ SYS_GETRANDOM = 359
+ SYS_MEMFD_CREATE = 360
+ SYS_BPF = 361
+ SYS_EXECVEAT = 362
+ SYS_SWITCH_ENDIAN = 363
+ SYS_USERFAULTFD = 364
+ SYS_MEMBARRIER = 365
+ SYS_MLOCK2 = 378
+ SYS_COPY_FILE_RANGE = 379
+ SYS_PREADV2 = 380
+ SYS_PWRITEV2 = 381
+ SYS_KEXEC_FILE_LOAD = 382
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go
index 42d4f5cda..8b35997d6 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go
@@ -1,4 +1,4 @@
-// mksysnum_linux.pl /usr/include/asm/unistd.h
+// mksysnum_linux.pl -Ilinux/usr/include -m64 -D__s390x__ linux/usr/include/asm/unistd.h
// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
// +build s390x,linux
@@ -303,6 +303,9 @@ const (
SYS_RECVMSG = 372
SYS_SHUTDOWN = 373
SYS_MLOCK2 = 374
+ SYS_COPY_FILE_RANGE = 375
+ SYS_PREADV2 = 376
+ SYS_PWRITEV2 = 377
SYS_SELECT = 142
SYS_GETRLIMIT = 191
SYS_LCHOWN = 198
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go
index 46b5bee1d..c9c129dc4 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go
@@ -1,4 +1,4 @@
-// mksysnum_linux.pl /usr/include/sparc64-linux-gnu/asm/unistd.h
+// mksysnum_linux.pl -Ilinux/usr/include -m64 -D__arch64__ linux/usr/include/asm/unistd.h
// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
// +build sparc64,linux
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go
index a3631053c..99dfd588a 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go
@@ -210,6 +210,22 @@ type RawSockaddrCAN struct {
Addr [8]byte
}
+type RawSockaddrALG struct {
+ Family uint16
+ Type [14]uint8
+ Feat uint32
+ Mask uint32
+ Name [64]uint8
+}
+
+type RawSockaddrVM struct {
+ Family uint16
+ Reserved1 uint16
+ Port uint32
+ Cid uint32
+ Zero [4]uint8
+}
+
type RawSockaddr struct {
Family uint16
Data [14]int8
@@ -334,6 +350,8 @@ const (
SizeofSockaddrNetlink = 0xc
SizeofSockaddrHCI = 0x6
SizeofSockaddrCAN = 0x10
+ SizeofSockaddrALG = 0x58
+ SizeofSockaddrVM = 0x10
SizeofLinger = 0x8
SizeofIPMreq = 0x8
SizeofIPMreqn = 0xc
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go
index 0573e6cd2..c9e1e64a2 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go
@@ -212,6 +212,22 @@ type RawSockaddrCAN struct {
Addr [8]byte
}
+type RawSockaddrALG struct {
+ Family uint16
+ Type [14]uint8
+ Feat uint32
+ Mask uint32
+ Name [64]uint8
+}
+
+type RawSockaddrVM struct {
+ Family uint16
+ Reserved1 uint16
+ Port uint32
+ Cid uint32
+ Zero [4]uint8
+}
+
type RawSockaddr struct {
Family uint16
Data [14]int8
@@ -338,6 +354,8 @@ const (
SizeofSockaddrNetlink = 0xc
SizeofSockaddrHCI = 0x6
SizeofSockaddrCAN = 0x10
+ SizeofSockaddrALG = 0x58
+ SizeofSockaddrVM = 0x10
SizeofLinger = 0x8
SizeofIPMreq = 0x8
SizeofIPMreqn = 0xc
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go
index 0578b5396..4bfba2a9e 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go
@@ -214,6 +214,22 @@ type RawSockaddrCAN struct {
Addr [8]byte
}
+type RawSockaddrALG struct {
+ Family uint16
+ Type [14]uint8
+ Feat uint32
+ Mask uint32
+ Name [64]uint8
+}
+
+type RawSockaddrVM struct {
+ Family uint16
+ Reserved1 uint16
+ Port uint32
+ Cid uint32
+ Zero [4]uint8
+}
+
type RawSockaddr struct {
Family uint16
Data [14]uint8
@@ -338,6 +354,8 @@ const (
SizeofSockaddrNetlink = 0xc
SizeofSockaddrHCI = 0x6
SizeofSockaddrCAN = 0x10
+ SizeofSockaddrALG = 0x58
+ SizeofSockaddrVM = 0x10
SizeofLinger = 0x8
SizeofIPMreq = 0x8
SizeofIPMreqn = 0xc
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go
index 808e04669..e58c500c1 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go
@@ -213,6 +213,22 @@ type RawSockaddrCAN struct {
Addr [8]byte
}
+type RawSockaddrALG struct {
+ Family uint16
+ Type [14]uint8
+ Feat uint32
+ Mask uint32
+ Name [64]uint8
+}
+
+type RawSockaddrVM struct {
+ Family uint16
+ Reserved1 uint16
+ Port uint32
+ Cid uint32
+ Zero [4]uint8
+}
+
type RawSockaddr struct {
Family uint16
Data [14]int8
@@ -339,6 +355,8 @@ const (
SizeofSockaddrNetlink = 0xc
SizeofSockaddrHCI = 0x6
SizeofSockaddrCAN = 0x10
+ SizeofSockaddrALG = 0x58
+ SizeofSockaddrVM = 0x10
SizeofLinger = 0x8
SizeofIPMreq = 0x8
SizeofIPMreqn = 0xc
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go
index 2eaff573d..a960085f8 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go
@@ -213,6 +213,22 @@ type RawSockaddrCAN struct {
Addr [8]byte
}
+type RawSockaddrALG struct {
+ Family uint16
+ Type [14]uint8
+ Feat uint32
+ Mask uint32
+ Name [64]uint8
+}
+
+type RawSockaddrVM struct {
+ Family uint16
+ Reserved1 uint16
+ Port uint32
+ Cid uint32
+ Zero [4]uint8
+}
+
type RawSockaddr struct {
Family uint16
Data [14]int8
@@ -336,6 +352,8 @@ const (
SizeofSockaddrNetlink = 0xc
SizeofSockaddrHCI = 0x6
SizeofSockaddrCAN = 0x10
+ SizeofSockaddrALG = 0x58
+ SizeofSockaddrVM = 0x10
SizeofLinger = 0x8
SizeofIPMreq = 0x8
SizeofIPMreqn = 0xc
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go
index 73e4b76c0..9d46a62c7 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go
@@ -213,6 +213,22 @@ type RawSockaddrCAN struct {
Addr [8]byte
}
+type RawSockaddrALG struct {
+ Family uint16
+ Type [14]uint8
+ Feat uint32
+ Mask uint32
+ Name [64]uint8
+}
+
+type RawSockaddrVM struct {
+ Family uint16
+ Reserved1 uint16
+ Port uint32
+ Cid uint32
+ Zero [4]uint8
+}
+
type RawSockaddr struct {
Family uint16
Data [14]int8
@@ -338,6 +354,8 @@ const (
SizeofSockaddrNetlink = 0xc
SizeofSockaddrHCI = 0x6
SizeofSockaddrCAN = 0x10
+ SizeofSockaddrALG = 0x58
+ SizeofSockaddrVM = 0x10
SizeofLinger = 0x8
SizeofIPMreq = 0x8
SizeofIPMreqn = 0xc
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go
index 479ca3e1b..267bfe903 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go
@@ -213,6 +213,22 @@ type RawSockaddrCAN struct {
Addr [8]byte
}
+type RawSockaddrALG struct {
+ Family uint16
+ Type [14]uint8
+ Feat uint32
+ Mask uint32
+ Name [64]uint8
+}
+
+type RawSockaddrVM struct {
+ Family uint16
+ Reserved1 uint16
+ Port uint32
+ Cid uint32
+ Zero [4]uint8
+}
+
type RawSockaddr struct {
Family uint16
Data [14]int8
@@ -338,6 +354,8 @@ const (
SizeofSockaddrNetlink = 0xc
SizeofSockaddrHCI = 0x6
SizeofSockaddrCAN = 0x10
+ SizeofSockaddrALG = 0x58
+ SizeofSockaddrVM = 0x10
SizeofLinger = 0x8
SizeofIPMreq = 0x8
SizeofIPMreqn = 0xc
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go
index 7617a69d0..950515a8e 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go
@@ -213,6 +213,22 @@ type RawSockaddrCAN struct {
Addr [8]byte
}
+type RawSockaddrALG struct {
+ Family uint16
+ Type [14]uint8
+ Feat uint32
+ Mask uint32
+ Name [64]uint8
+}
+
+type RawSockaddrVM struct {
+ Family uint16
+ Reserved1 uint16
+ Port uint32
+ Cid uint32
+ Zero [4]uint8
+}
+
type RawSockaddr struct {
Family uint16
Data [14]int8
@@ -336,6 +352,8 @@ const (
SizeofSockaddrNetlink = 0xc
SizeofSockaddrHCI = 0x6
SizeofSockaddrCAN = 0x10
+ SizeofSockaddrALG = 0x58
+ SizeofSockaddrVM = 0x10
SizeofLinger = 0x8
SizeofIPMreq = 0x8
SizeofIPMreqn = 0xc
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go
index 2db548b90..88538cbdc 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go
@@ -214,6 +214,22 @@ type RawSockaddrCAN struct {
Addr [8]byte
}
+type RawSockaddrALG struct {
+ Family uint16
+ Type [14]uint8
+ Feat uint32
+ Mask uint32
+ Name [64]uint8
+}
+
+type RawSockaddrVM struct {
+ Family uint16
+ Reserved1 uint16
+ Port uint32
+ Cid uint32
+ Zero [4]uint8
+}
+
type RawSockaddr struct {
Family uint16
Data [14]uint8
@@ -340,6 +356,8 @@ const (
SizeofSockaddrNetlink = 0xc
SizeofSockaddrHCI = 0x6
SizeofSockaddrCAN = 0x10
+ SizeofSockaddrALG = 0x58
+ SizeofSockaddrVM = 0x10
SizeofLinger = 0x8
SizeofIPMreq = 0x8
SizeofIPMreqn = 0xc
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go
index 4bfdcc0ac..2f63bc032 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go
@@ -214,6 +214,22 @@ type RawSockaddrCAN struct {
Addr [8]byte
}
+type RawSockaddrALG struct {
+ Family uint16
+ Type [14]uint8
+ Feat uint32
+ Mask uint32
+ Name [64]uint8
+}
+
+type RawSockaddrVM struct {
+ Family uint16
+ Reserved1 uint16
+ Port uint32
+ Cid uint32
+ Zero [4]uint8
+}
+
type RawSockaddr struct {
Family uint16
Data [14]uint8
@@ -340,6 +356,8 @@ const (
SizeofSockaddrNetlink = 0xc
SizeofSockaddrHCI = 0x6
SizeofSockaddrCAN = 0x10
+ SizeofSockaddrALG = 0x58
+ SizeofSockaddrVM = 0x10
SizeofLinger = 0x8
SizeofIPMreq = 0x8
SizeofIPMreqn = 0xc
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go
index 435cd792f..2c5bb05d1 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go
@@ -213,6 +213,22 @@ type RawSockaddrCAN struct {
Addr [8]byte
}
+type RawSockaddrALG struct {
+ Family uint16
+ Type [14]uint8
+ Feat uint32
+ Mask uint32
+ Name [64]uint8
+}
+
+type RawSockaddrVM struct {
+ Family uint16
+ Reserved1 uint16
+ Port uint32
+ Cid uint32
+ Zero [4]uint8
+}
+
type RawSockaddr struct {
Family uint16
Data [14]int8
@@ -338,6 +354,8 @@ const (
SizeofSockaddrNetlink = 0xc
SizeofSockaddrHCI = 0x6
SizeofSockaddrCAN = 0x10
+ SizeofSockaddrALG = 0x58
+ SizeofSockaddrVM = 0x10
SizeofLinger = 0x8
SizeofIPMreq = 0x8
SizeofIPMreqn = 0xc
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go
index 439f96914..22bdab961 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go
@@ -218,6 +218,22 @@ type RawSockaddrCAN struct {
Addr [8]byte
}
+type RawSockaddrALG struct {
+ Family uint16
+ Type [14]uint8
+ Feat uint32
+ Mask uint32
+ Name [64]uint8
+}
+
+type RawSockaddrVM struct {
+ Family uint16
+ Reserved1 uint16
+ Port uint32
+ Cid uint32
+ Zero [4]uint8
+}
+
type RawSockaddr struct {
Family uint16
Data [14]int8
@@ -343,6 +359,8 @@ const (
SizeofSockaddrNetlink = 0xc
SizeofSockaddrHCI = 0x6
SizeofSockaddrCAN = 0x10
+ SizeofSockaddrALG = 0x58
+ SizeofSockaddrVM = 0x10
SizeofLinger = 0x8
SizeofIPMreq = 0x8
SizeofIPMreqn = 0xc
diff --git a/vendor/gopkg.in/gomail.v2/.travis.yml b/vendor/gopkg.in/gomail.v2/.travis.yml
new file mode 100644
index 000000000..24edf22cc
--- /dev/null
+++ b/vendor/gopkg.in/gomail.v2/.travis.yml
@@ -0,0 +1,8 @@
+language: go
+
+go:
+ - 1.2
+ - 1.3
+ - 1.4
+ - 1.5
+ - tip
diff --git a/vendor/gopkg.in/gomail.v2/CHANGELOG.md b/vendor/gopkg.in/gomail.v2/CHANGELOG.md
new file mode 100644
index 000000000..a797ab4c0
--- /dev/null
+++ b/vendor/gopkg.in/gomail.v2/CHANGELOG.md
@@ -0,0 +1,20 @@
+# Change Log
+All notable changes to this project will be documented in this file.
+This project adheres to [Semantic Versioning](http://semver.org/).
+
+## [2.0.0] - 2015-09-02
+
+- Mailer has been removed. It has been replaced by Dialer and Sender.
+- `File` type and the `CreateFile` and `OpenFile` functions have been removed.
+- `Message.Attach` and `Message.Embed` have a new signature.
+- `Message.GetBodyWriter` has been removed. Use `Message.AddAlternativeWriter`
+instead.
+- `Message.Export` has been removed. `Message.WriteTo` can be used instead.
+- `Message.DelHeader` has been removed.
+- The `Bcc` header field is no longer sent. It is far more simpler and
+efficient: the same message is sent to all recipients instead of sending a
+different email to each Bcc address.
+- LoginAuth has been removed. `NewPlainDialer` now implements the LOGIN
+authentication mechanism when needed.
+- Go 1.2 is now required instead of Go 1.3. No external dependency are used when
+using Go 1.5.
diff --git a/vendor/gopkg.in/gomail.v2/CONTRIBUTING.md b/vendor/gopkg.in/gomail.v2/CONTRIBUTING.md
new file mode 100644
index 000000000..d5601c257
--- /dev/null
+++ b/vendor/gopkg.in/gomail.v2/CONTRIBUTING.md
@@ -0,0 +1,20 @@
+Thank you for contributing to Gomail! Here are a few guidelines:
+
+## Bugs
+
+If you think you found a bug, create an issue and supply the minimum amount
+of code triggering the bug so it can be reproduced.
+
+
+## Fixing a bug
+
+If you want to fix a bug, you can send a pull request. It should contains a
+new test or update an existing one to cover that bug.
+
+
+## New feature proposal
+
+If you think Gomail lacks a feature, you can open an issue or send a pull
+request. I want to keep Gomail code and API as simple as possible so please
+describe your needs so we can discuss whether this feature should be added to
+Gomail or not.
diff --git a/vendor/gopkg.in/gomail.v2/LICENSE b/vendor/gopkg.in/gomail.v2/LICENSE
new file mode 100644
index 000000000..5f5c12af7
--- /dev/null
+++ b/vendor/gopkg.in/gomail.v2/LICENSE
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 Alexandre Cesaro
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/vendor/gopkg.in/gomail.v2/README.md b/vendor/gopkg.in/gomail.v2/README.md
new file mode 100644
index 000000000..18cb88130
--- /dev/null
+++ b/vendor/gopkg.in/gomail.v2/README.md
@@ -0,0 +1,97 @@
+# Gomail
+[![Build Status](https://travis-ci.org/go-gomail/gomail.svg?branch=v2)](https://travis-ci.org/go-gomail/gomail) [![Code Coverage](http://gocover.io/_badge/gopkg.in/gomail.v2)](http://gocover.io/gopkg.in/gomail.v2) [![Documentation](https://godoc.org/gopkg.in/gomail.v2?status.svg)](https://godoc.org/gopkg.in/gomail.v2)
+
+## Introduction
+
+Gomail is a simple and efficient package to send emails. It is well tested and
+documented.
+
+It is versioned using [gopkg.in](https://gopkg.in) so I promise
+they will never be backward incompatible changes within each version.
+
+It requires Go 1.2 or newer. With Go 1.5, no external dependencies are used.
+
+
+## Features
+
+Gomail supports:
+- Attachments
+- Embedded images
+- HTML and text templates
+- Automatic encoding of special characters
+- SSL and TLS
+- Sending multiple emails with the same SMTP connection
+- Any method to send emails: SMTP, postfix (not included but easily doable), etc
+
+
+## Documentation
+
+https://godoc.org/gopkg.in/gomail.v2
+
+
+## Download
+
+ go get gopkg.in/gomail.v2
+
+
+## Examples
+
+See the [examples in the documentation](https://godoc.org/gopkg.in/gomail.v2#example-package).
+
+
+## FAQ
+
+### x509: certificate signed by unknown authority
+
+If you get this error it means the certificate used by the SMTP server is not
+considered valid by the client running Gomail. As a quick workaround you can
+bypass the verification of the server's certificate chain and host name by using
+`SetTLSConfig`:
+
+ d := gomail.NewPlainDialer("smtp.example.com", "user", "123456", 587)
+ d.TLSConfig = &tls.Config{InsecureSkipVerify: true}
+
+Note, however, that this is insecure and should not be used in production.
+
+
+## Contribute
+
+Contributions are more than welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) for
+more info.
+
+
+## Change log
+
+See [CHANGELOG.md](CHANGELOG.md).
+
+
+## License
+
+[MIT](LICENSE)
+
+
+## Contact
+
+You can ask questions on the [Gomail
+thread](https://groups.google.com/d/topic/golang-nuts/jMxZHzvvEVg/discussion)
+in the Go mailing-list.
+
+
+## Support
+
+If you want to support the development of Gomail, I gladly accept donations.
+
+I will give 100% of the money I receive to
+[Enfants, Espoir Du Monde](http://www.eedm.fr/).
+EEDM is a French NGO which helps children in Bangladesh, Cameroun, Haiti, India
+and Madagascar.
+
+All its members are volunteers so its operating costs are only
+1.9%. So your money will directly helps children of these countries.
+
+As an added bonus, your donations will also tip me by lowering my taxes :smile:
+
+I will send an email with the receipt of the donation to EEDM annually to all
+donors.
+
+[![Donate](https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=PYQKC7VFVXCFG)
diff --git a/vendor/gopkg.in/gomail.v2/auth.go b/vendor/gopkg.in/gomail.v2/auth.go
new file mode 100644
index 000000000..4bcdd0620
--- /dev/null
+++ b/vendor/gopkg.in/gomail.v2/auth.go
@@ -0,0 +1,67 @@
+package gomail
+
+import (
+ "bytes"
+ "errors"
+ "fmt"
+ "net/smtp"
+)
+
+// plainAuth is an smtp.Auth that implements the PLAIN authentication mechanism.
+// It fallbacks to the LOGIN mechanism if it is the only mechanism advertised
+// by the server.
+type plainAuth struct {
+ username string
+ password string
+ host string
+ login bool
+}
+
+func (a *plainAuth) Start(server *smtp.ServerInfo) (string, []byte, error) {
+ if server.Name != a.host {
+ return "", nil, errors.New("gomail: wrong host name")
+ }
+
+ var plain, login bool
+ for _, a := range server.Auth {
+ switch a {
+ case "PLAIN":
+ plain = true
+ case "LOGIN":
+ login = true
+ }
+ }
+
+ if !server.TLS && !plain && !login {
+ return "", nil, errors.New("gomail: unencrypted connection")
+ }
+
+ if !plain && login {
+ a.login = true
+ return "LOGIN", nil, nil
+ }
+
+ return "PLAIN", []byte("\x00" + a.username + "\x00" + a.password), nil
+}
+
+func (a *plainAuth) Next(fromServer []byte, more bool) ([]byte, error) {
+ if !a.login {
+ if more {
+ return nil, errors.New("gomail: unexpected server challenge")
+ }
+ return nil, nil
+ }
+
+ if !more {
+ return nil, nil
+ }
+
+ switch {
+ case bytes.Equal(fromServer, []byte("Username:")):
+ return []byte(a.username), nil
+ case bytes.Equal(fromServer, []byte("Password:")):
+ return []byte(a.password), nil
+ default:
+ return nil, fmt.Errorf("gomail: unexpected server challenge: %s", fromServer)
+ }
+}
diff --git a/vendor/gopkg.in/gomail.v2/auth_test.go b/vendor/gopkg.in/gomail.v2/auth_test.go
new file mode 100644
index 000000000..20b477214
--- /dev/null
+++ b/vendor/gopkg.in/gomail.v2/auth_test.go
@@ -0,0 +1,156 @@
+package gomail
+
+import (
+ "net/smtp"
+ "testing"
+)
+
+const (
+ testUser = "user"
+ testPwd = "pwd"
+ testHost = "smtp.example.com"
+)
+
+var testAuth = &plainAuth{
+ username: testUser,
+ password: testPwd,
+ host: testHost,
+}
+
+type plainAuthTest struct {
+ auths []string
+ challenges []string
+ tls bool
+ wantProto string
+ wantData []string
+ wantError bool
+}
+
+func TestNoAdvertisement(t *testing.T) {
+ testPlainAuth(t, &plainAuthTest{
+ auths: []string{},
+ challenges: []string{"Username:", "Password:"},
+ tls: false,
+ wantProto: "PLAIN",
+ wantError: true,
+ })
+}
+
+func TestNoAdvertisementTLS(t *testing.T) {
+ testPlainAuth(t, &plainAuthTest{
+ auths: []string{},
+ challenges: []string{"Username:", "Password:"},
+ tls: true,
+ wantProto: "PLAIN",
+ wantData: []string{"\x00" + testUser + "\x00" + testPwd},
+ })
+}
+
+func TestPlain(t *testing.T) {
+ testPlainAuth(t, &plainAuthTest{
+ auths: []string{"PLAIN"},
+ challenges: []string{"Username:", "Password:"},
+ tls: false,
+ wantProto: "PLAIN",
+ wantData: []string{"\x00" + testUser + "\x00" + testPwd},
+ })
+}
+
+func TestPlainTLS(t *testing.T) {
+ testPlainAuth(t, &plainAuthTest{
+ auths: []string{"PLAIN"},
+ challenges: []string{"Username:", "Password:"},
+ tls: true,
+ wantProto: "PLAIN",
+ wantData: []string{"\x00" + testUser + "\x00" + testPwd},
+ })
+}
+
+func TestPlainAndLogin(t *testing.T) {
+ testPlainAuth(t, &plainAuthTest{
+ auths: []string{"PLAIN", "LOGIN"},
+ challenges: []string{"Username:", "Password:"},
+ tls: false,
+ wantProto: "PLAIN",
+ wantData: []string{"\x00" + testUser + "\x00" + testPwd},
+ })
+}
+
+func TestPlainAndLoginTLS(t *testing.T) {
+ testPlainAuth(t, &plainAuthTest{
+ auths: []string{"PLAIN", "LOGIN"},
+ challenges: []string{"Username:", "Password:"},
+ tls: true,
+ wantProto: "PLAIN",
+ wantData: []string{"\x00" + testUser + "\x00" + testPwd},
+ })
+}
+
+func TestLogin(t *testing.T) {
+ testPlainAuth(t, &plainAuthTest{
+ auths: []string{"LOGIN"},
+ challenges: []string{"Username:", "Password:"},
+ tls: false,
+ wantProto: "LOGIN",
+ wantData: []string{"", testUser, testPwd},
+ })
+}
+
+func TestLoginTLS(t *testing.T) {
+ testPlainAuth(t, &plainAuthTest{
+ auths: []string{"LOGIN"},
+ challenges: []string{"Username:", "Password:"},
+ tls: true,
+ wantProto: "LOGIN",
+ wantData: []string{"", testUser, testPwd},
+ })
+}
+
+func testPlainAuth(t *testing.T, test *plainAuthTest) {
+ auth := &plainAuth{
+ username: testUser,
+ password: testPwd,
+ host: testHost,
+ }
+ server := &smtp.ServerInfo{
+ Name: testHost,
+ TLS: test.tls,
+ Auth: test.auths,
+ }
+ proto, toServer, err := auth.Start(server)
+ if err != nil && !test.wantError {
+ t.Fatalf("plainAuth.Start(): %v", err)
+ }
+ if err != nil && test.wantError {
+ return
+ }
+ if proto != test.wantProto {
+ t.Errorf("invalid protocol, got %q, want %q", proto, test.wantProto)
+ }
+
+ i := 0
+ got := string(toServer)
+ if got != test.wantData[i] {
+ t.Errorf("Invalid response, got %q, want %q", got, test.wantData[i])
+ }
+
+ if proto == "PLAIN" {
+ return
+ }
+
+ for _, challenge := range test.challenges {
+ i++
+ if i >= len(test.wantData) {
+ t.Fatalf("unexpected challenge: %q", challenge)
+ }
+
+ toServer, err = auth.Next([]byte(challenge), true)
+ if err != nil {
+ t.Fatalf("plainAuth.Auth(): %v", err)
+ }
+ got = string(toServer)
+ if got != test.wantData[i] {
+ t.Errorf("Invalid response, got %q, want %q", got, test.wantData[i])
+ }
+ }
+}
diff --git a/vendor/gopkg.in/gomail.v2/doc.go b/vendor/gopkg.in/gomail.v2/doc.go
new file mode 100644
index 000000000..a8f5091f5
--- /dev/null
+++ b/vendor/gopkg.in/gomail.v2/doc.go
@@ -0,0 +1,5 @@
+// Package gomail provides a simple interface to compose emails and to mail them
+// efficiently.
+//
+// More info on Github: https://github.com/go-gomail/gomail
+package gomail
diff --git a/vendor/gopkg.in/gomail.v2/example_test.go b/vendor/gopkg.in/gomail.v2/example_test.go
new file mode 100644
index 000000000..8d9c6c293
--- /dev/null
+++ b/vendor/gopkg.in/gomail.v2/example_test.go
@@ -0,0 +1,215 @@
+package gomail_test
+
+import (
+ "fmt"
+ "html/template"
+ "io"
+ "log"
+ "time"
+
+ "gopkg.in/gomail.v2"
+)
+
+func Example() {
+ m := gomail.NewMessage()
+ m.SetHeader("From", "alex@example.com")
+ m.SetHeader("To", "bob@example.com", "cora@example.com")
+ m.SetAddressHeader("Cc", "dan@example.com", "Dan")
+ m.SetHeader("Subject", "Hello!")
+ m.SetBody("text/html", "Hello <b>Bob</b> and <i>Cora</i>!")
+ m.Attach("/home/Alex/lolcat.jpg")
+
+ d := gomail.NewPlainDialer("smtp.example.com", 587, "user", "123456")
+
+ // Send the email to Bob, Cora and Dan.
+ if err := d.DialAndSend(m); err != nil {
+ panic(err)
+ }
+}
+
+// A daemon that listens to a channel and sends all incoming messages.
+func Example_daemon() {
+ ch := make(chan *gomail.Message)
+
+ go func() {
+ d := gomail.NewPlainDialer("smtp.example.com", 587, "user", "123456")
+
+ var s gomail.SendCloser
+ var err error
+ open := false
+ for {
+ select {
+ case m, ok := <-ch:
+ if !ok {
+ return
+ }
+ if !open {
+ if s, err = d.Dial(); err != nil {
+ panic(err)
+ }
+ open = true
+ }
+ if err := gomail.Send(s, m); err != nil {
+ log.Print(err)
+ }
+ // Close the connection to the SMTP server if no email was sent in
+ // the last 30 seconds.
+ case <-time.After(30 * time.Second):
+ if open {
+ if err := s.Close(); err != nil {
+ panic(err)
+ }
+ open = false
+ }
+ }
+ }
+ }()
+
+ // Use the channel in your program to send emails.
+
+ // Close the channel to stop the mail daemon.
+ close(ch)
+}
+
+// Efficiently send a customized newsletter to a list of recipients.
+func Example_newsletter() {
+ // The list of recipients.
+ var list []struct {
+ Name string
+ Address string
+ }
+
+ d := gomail.NewPlainDialer("smtp.example.com", 587, "user", "123456")
+ s, err := d.Dial()
+ if err != nil {
+ panic(err)
+ }
+
+ m := gomail.NewMessage()
+ for _, r := range list {
+ m.SetHeader("From", "no-reply@example.com")
+ m.SetAddressHeader("To", r.Address, r.Name)
+ m.SetHeader("Subject", "Newsletter #1")
+ m.SetBody("text/html", fmt.Sprintf("Hello %s!", r.Name))
+
+ if err := gomail.Send(s, m); err != nil {
+ log.Printf("Could not send email to %q: %v", r.Address, err)
+ }
+ m.Reset()
+ }
+}
+
+// Send an email using a local SMTP server.
+func Example_noAuth() {
+ m := gomail.NewMessage()
+ m.SetHeader("From", "from@example.com")
+ m.SetHeader("To", "to@example.com")
+ m.SetHeader("Subject", "Hello!")
+ m.SetBody("text/plain", "Hello!")
+
+ d := gomail.Dialer{Host: "localhost", Port: 587}
+ if err := d.DialAndSend(m); err != nil {
+ panic(err)
+ }
+}
+
+// Send an email using an API or postfix.
+func Example_noSMTP() {
+ m := gomail.NewMessage()
+ m.SetHeader("From", "from@example.com")
+ m.SetHeader("To", "to@example.com")
+ m.SetHeader("Subject", "Hello!")
+ m.SetBody("text/plain", "Hello!")
+
+ s := gomail.SendFunc(func(from string, to []string, msg io.WriterTo) error {
+ // Implements you email-sending function, for example by calling
+ // an API, or running postfix, etc.
+ fmt.Println("From:", from)
+ fmt.Println("To:", to)
+ return nil
+ })
+
+ if err := gomail.Send(s, m); err != nil {
+ panic(err)
+ }
+ // Output:
+ // From: from@example.com
+ // To: [to@example.com]
+}
+
+var m *gomail.Message
+
+func ExampleSetCopyFunc() {
+ m.Attach("foo.txt", gomail.SetCopyFunc(func(w io.Writer) error {
+ _, err := w.Write([]byte("Content of foo.txt"))
+ return err
+ }))
+}
+
+func ExampleSetHeader() {
+ h := map[string][]string{"Content-ID": {"<foo@bar.mail>"}}
+ m.Attach("foo.jpg", gomail.SetHeader(h))
+}
+
+func ExampleMessage_AddAlternative() {
+ m.SetBody("text/plain", "Hello!")
+ m.AddAlternative("text/html", "<p>Hello!</p>")
+}
+
+func ExampleMessage_AddAlternativeWriter() {
+ t := template.Must(template.New("example").Parse("Hello {{.}}!"))
+ m.AddAlternativeWriter("text/plain", func(w io.Writer) error {
+ return t.Execute(w, "Bob")
+ })
+}
+
+func ExampleMessage_Attach() {
+ m.Attach("/tmp/image.jpg")
+}
+
+func ExampleMessage_Embed() {
+ m.Embed("/tmp/image.jpg")
+ m.SetBody("text/html", `<img src="cid:image.jpg" alt="My image" />`)
+}
+
+func ExampleMessage_FormatAddress() {
+ m.SetHeader("To", m.FormatAddress("bob@example.com", "Bob"), m.FormatAddress("cora@example.com", "Cora"))
+}
+
+func ExampleMessage_FormatDate() {
+ m.SetHeaders(map[string][]string{
+ "X-Date": {m.FormatDate(time.Now())},
+ })
+}
+
+func ExampleMessage_SetAddressHeader() {
+ m.SetAddressHeader("To", "bob@example.com", "Bob")
+}
+
+func ExampleMessage_SetBody() {
+ m.SetBody("text/plain", "Hello!")
+}
+
+func ExampleMessage_SetDateHeader() {
+ m.SetDateHeader("X-Date", time.Now())
+}
+
+func ExampleMessage_SetHeader() {
+ m.SetHeader("Subject", "Hello!")
+}
+
+func ExampleMessage_SetHeaders() {
+ m.SetHeaders(map[string][]string{
+ "From": {m.FormatAddress("alex@example.com", "Alex")},
+ "To": {"bob@example.com", "cora@example.com"},
+ "Subject": {"Hello"},
+ })
+}
+
+func ExampleSetCharset() {
+ m = gomail.NewMessage(gomail.SetCharset("ISO-8859-1"))
+}
+
+func ExampleSetEncoding() {
+ m = gomail.NewMessage(gomail.SetEncoding(gomail.Base64))
+}
diff --git a/vendor/gopkg.in/gomail.v2/message.go b/vendor/gopkg.in/gomail.v2/message.go
new file mode 100644
index 000000000..2f75368bd
--- /dev/null
+++ b/vendor/gopkg.in/gomail.v2/message.go
@@ -0,0 +1,302 @@
+package gomail
+
+import (
+ "bytes"
+ "io"
+ "os"
+ "path/filepath"
+ "time"
+)
+
+// Message represents an email.
+type Message struct {
+ header header
+ parts []part
+ attachments []*file
+ embedded []*file
+ charset string
+ encoding Encoding
+ hEncoder mimeEncoder
+ buf bytes.Buffer
+}
+
+type header map[string][]string
+
+type part struct {
+ header header
+ copier func(io.Writer) error
+}
+
+// NewMessage creates a new message. It uses UTF-8 and quoted-printable encoding
+// by default.
+func NewMessage(settings ...MessageSetting) *Message {
+ m := &Message{
+ header: make(header),
+ charset: "UTF-8",
+ encoding: QuotedPrintable,
+ }
+
+ m.applySettings(settings)
+
+ if m.encoding == Base64 {
+ m.hEncoder = bEncoding
+ } else {
+ m.hEncoder = qEncoding
+ }
+
+ return m
+}
+
+// Reset resets the message so it can be reused. The message keeps its previous
+// settings so it is in the same state that after a call to NewMessage.
+func (m *Message) Reset() {
+ for k := range m.header {
+ delete(m.header, k)
+ }
+ m.parts = nil
+ m.attachments = nil
+ m.embedded = nil
+}
+
+func (m *Message) applySettings(settings []MessageSetting) {
+ for _, s := range settings {
+ s(m)
+ }
+}
+
+// A MessageSetting can be used as an argument in NewMessage to configure an
+// email.
+type MessageSetting func(m *Message)
+
+// SetCharset is a message setting to set the charset of the email.
+func SetCharset(charset string) MessageSetting {
+ return func(m *Message) {
+ m.charset = charset
+ }
+}
+
+// SetEncoding is a message setting to set the encoding of the email.
+func SetEncoding(enc Encoding) MessageSetting {
+ return func(m *Message) {
+ m.encoding = enc
+ }
+}
+
+// Encoding represents a MIME encoding scheme like quoted-printable or base64.
+type Encoding string
+
+const (
+ // QuotedPrintable represents the quoted-printable encoding as defined in
+ // RFC 2045.
+ QuotedPrintable Encoding = "quoted-printable"
+ // Base64 represents the base64 encoding as defined in RFC 2045.
+ Base64 Encoding = "base64"
+ // Unencoded can be used to avoid encoding the body of an email. The headers
+ // will still be encoded using quoted-printable encoding.
+ Unencoded Encoding = "8bit"
+)
+
+// SetHeader sets a value to the given header field.
+func (m *Message) SetHeader(field string, value ...string) {
+ m.encodeHeader(value)
+ m.header[field] = value
+}
+
+func (m *Message) encodeHeader(values []string) {
+ for i := range values {
+ values[i] = m.encodeString(values[i])
+ }
+}
+
+func (m *Message) encodeString(value string) string {
+ return m.hEncoder.Encode(m.charset, value)
+}
+
+// SetHeaders sets the message headers.
+func (m *Message) SetHeaders(h map[string][]string) {
+ for k, v := range h {
+ m.SetHeader(k, v...)
+ }
+}
+
+// SetAddressHeader sets an address to the given header field.
+func (m *Message) SetAddressHeader(field, address, name string) {
+ m.header[field] = []string{m.FormatAddress(address, name)}
+}
+
+// FormatAddress formats an address and a name as a valid RFC 5322 address.
+func (m *Message) FormatAddress(address, name string) string {
+ enc := m.encodeString(name)
+ if enc == name {
+ m.buf.WriteByte('"')
+ for i := 0; i < len(name); i++ {
+ b := name[i]
+ if b == '\\' || b == '"' {
+ m.buf.WriteByte('\\')
+ }
+ m.buf.WriteByte(b)
+ }
+ m.buf.WriteByte('"')
+ } else if hasSpecials(name) {
+ m.buf.WriteString(bEncoding.Encode(m.charset, name))
+ } else {
+ m.buf.WriteString(enc)
+ }
+ m.buf.WriteString(" <")
+ m.buf.WriteString(address)
+ m.buf.WriteByte('>')
+
+ addr := m.buf.String()
+ m.buf.Reset()
+ return addr
+}
+
+func hasSpecials(text string) bool {
+ for i := 0; i < len(text); i++ {
+ switch c := text[i]; c {
+ case '(', ')', '<', '>', '[', ']', ':', ';', '@', '\\', ',', '.', '"':
+ return true
+ }
+ }
+
+ return false
+}
+
+// SetDateHeader sets a date to the given header field.
+func (m *Message) SetDateHeader(field string, date time.Time) {
+ m.header[field] = []string{m.FormatDate(date)}
+}
+
+// FormatDate formats a date as a valid RFC 5322 date.
+func (m *Message) FormatDate(date time.Time) string {
+ return date.Format(time.RFC1123Z)
+}
+
+// GetHeader gets a header field.
+func (m *Message) GetHeader(field string) []string {
+ return m.header[field]
+}
+
+// SetBody sets the body of the message.
+func (m *Message) SetBody(contentType, body string) {
+ m.parts = []part{
+ {
+ header: m.getPartHeader(contentType),
+ copier: func(w io.Writer) error {
+ _, err := io.WriteString(w, body)
+ return err
+ },
+ },
+ }
+}
+
+// AddAlternative adds an alternative part to the message.
+//
+// It is commonly used to send HTML emails that default to the plain text
+// version for backward compatibility.
+//
+// More info: http://en.wikipedia.org/wiki/MIME#Alternative
+func (m *Message) AddAlternative(contentType, body string) {
+ m.parts = append(m.parts,
+ part{
+ header: m.getPartHeader(contentType),
+ copier: func(w io.Writer) error {
+ _, err := io.WriteString(w, body)
+ return err
+ },
+ },
+ )
+}
+
+// AddAlternativeWriter adds an alternative part to the message. It can be
+// useful with the text/template or html/template packages.
+func (m *Message) AddAlternativeWriter(contentType string, f func(io.Writer) error) {
+ m.parts = []part{
+ {
+ header: m.getPartHeader(contentType),
+ copier: f,
+ },
+ }
+}
+
+func (m *Message) getPartHeader(contentType string) header {
+ return map[string][]string{
+ "Content-Type": {contentType + "; charset=" + m.charset},
+ "Content-Transfer-Encoding": {string(m.encoding)},
+ }
+}
+
+type file struct {
+ Name string
+ Header map[string][]string
+ CopyFunc func(w io.Writer) error
+}
+
+func (f *file) setHeader(field, value string) {
+ f.Header[field] = []string{value}
+}
+
+// A FileSetting can be used as an argument in Message.Attach or Message.Embed.
+type FileSetting func(*file)
+
+// SetHeader is a file setting to set the MIME header of the message part that
+// contains the file content.
+//
+// Mandatory headers are automatically added if they are not set when sending
+// the email.
+func SetHeader(h map[string][]string) FileSetting {
+ return func(f *file) {
+ for k, v := range h {
+ f.Header[k] = v
+ }
+ }
+}
+
+// SetCopyFunc is a file setting to replace the function that runs when the
+// message is sent. It should copy the content of the file to the io.Writer.
+//
+// The default copy function opens the file with the given filename, and copy
+// its content to the io.Writer.
+func SetCopyFunc(f func(io.Writer) error) FileSetting {
+ return func(fi *file) {
+ fi.CopyFunc = f
+ }
+}
+
+func (m *Message) appendFile(list []*file, name string, settings []FileSetting) []*file {
+ f := &file{
+ Name: filepath.Base(name),
+ Header: make(map[string][]string),
+ CopyFunc: func(w io.Writer) error {
+ h, err := os.Open(name)
+ if err != nil {
+ return err
+ }
+ if _, err := io.Copy(w, h); err != nil {
+ h.Close()
+ return err
+ }
+ return h.Close()
+ },
+ }
+
+ for _, s := range settings {
+ s(f)
+ }
+
+ if list == nil {
+ return []*file{f}
+ }
+
+ return append(list, f)
+}
+
+// Attach attaches the files to the email.
+func (m *Message) Attach(filename string, settings ...FileSetting) {
+ m.attachments = m.appendFile(m.attachments, filename, settings)
+}
+
+// Embed embeds the images to the email.
+func (m *Message) Embed(filename string, settings ...FileSetting) {
+ m.embedded = m.appendFile(m.embedded, filename, settings)
+}
diff --git a/vendor/gopkg.in/gomail.v2/message_test.go b/vendor/gopkg.in/gomail.v2/message_test.go
new file mode 100644
index 000000000..fdd9ff9bd
--- /dev/null
+++ b/vendor/gopkg.in/gomail.v2/message_test.go
@@ -0,0 +1,630 @@
+package gomail
+
+import (
+ "bytes"
+ "encoding/base64"
+ "io"
+ "io/ioutil"
+ "path/filepath"
+ "regexp"
+ "strconv"
+ "strings"
+ "testing"
+ "time"
+)
+
+func init() {
+ now = func() time.Time {
+ return time.Date(2014, 06, 25, 17, 46, 0, 0, time.UTC)
+ }
+}
+
+type message struct {
+ from string
+ to []string
+ content string
+}
+
+func TestMessage(t *testing.T) {
+ m := NewMessage()
+ m.SetAddressHeader("From", "from@example.com", "Señor From")
+ m.SetHeader("To", m.FormatAddress("to@example.com", "Señor To"), "tobis@example.com")
+ m.SetAddressHeader("Cc", "cc@example.com", "A, B")
+ m.SetAddressHeader("X-To", "ccbis@example.com", "à, b")
+ m.SetDateHeader("X-Date", now())
+ m.SetHeader("X-Date-2", m.FormatDate(now()))
+ m.SetHeader("Subject", "¡Hola, señor!")
+ m.SetHeaders(map[string][]string{
+ "X-Headers": {"Test", "Café"},
+ })
+ m.SetBody("text/plain", "¡Hola, señor!")
+
+ want := &message{
+ from: "from@example.com",
+ to: []string{
+ "to@example.com",
+ "tobis@example.com",
+ "cc@example.com",
+ },
+ content: "From: =?UTF-8?q?Se=C3=B1or_From?= <from@example.com>\r\n" +
+ "To: =?UTF-8?q?Se=C3=B1or_To?= <to@example.com>, tobis@example.com\r\n" +
+ "Cc: \"A, B\" <cc@example.com>\r\n" +
+ "X-To: =?UTF-8?b?w6AsIGI=?= <ccbis@example.com>\r\n" +
+ "X-Date: Wed, 25 Jun 2014 17:46:00 +0000\r\n" +
+ "X-Date-2: Wed, 25 Jun 2014 17:46:00 +0000\r\n" +
+ "X-Headers: Test, =?UTF-8?q?Caf=C3=A9?=\r\n" +
+ "Subject: =?UTF-8?q?=C2=A1Hola,_se=C3=B1or!?=\r\n" +
+ "Content-Type: text/plain; charset=UTF-8\r\n" +
+ "Content-Transfer-Encoding: quoted-printable\r\n" +
+ "\r\n" +
+ "=C2=A1Hola, se=C3=B1or!",
+ }
+
+ testMessage(t, m, 0, want)
+}
+
+func TestBodyWriter(t *testing.T) {
+ m := NewMessage()
+ m.SetHeader("From", "from@example.com")
+ m.SetHeader("To", "to@example.com")
+ m.AddAlternativeWriter("text/plain", func(w io.Writer) error {
+ _, err := w.Write([]byte("Test message"))
+ return err
+ })
+
+ want := &message{
+ from: "from@example.com",
+ to: []string{"to@example.com"},
+ content: "From: from@example.com\r\n" +
+ "To: to@example.com\r\n" +
+ "Content-Type: text/plain; charset=UTF-8\r\n" +
+ "Content-Transfer-Encoding: quoted-printable\r\n" +
+ "\r\n" +
+ "Test message",
+ }
+
+ testMessage(t, m, 0, want)
+}
+
+func TestCustomMessage(t *testing.T) {
+ m := NewMessage(SetCharset("ISO-8859-1"), SetEncoding(Base64))
+ m.SetHeaders(map[string][]string{
+ "From": {"from@example.com"},
+ "To": {"to@example.com"},
+ "Subject": {"Café"},
+ })
+ m.SetBody("text/html", "¡Hola, señor!")
+
+ want := &message{
+ from: "from@example.com",
+ to: []string{"to@example.com"},
+ content: "From: from@example.com\r\n" +
+ "To: to@example.com\r\n" +
+ "Subject: =?ISO-8859-1?b?Q2Fmw6k=?=\r\n" +
+ "Content-Type: text/html; charset=ISO-8859-1\r\n" +
+ "Content-Transfer-Encoding: base64\r\n" +
+ "\r\n" +
+ "wqFIb2xhLCBzZcOxb3Ih",
+ }
+
+ testMessage(t, m, 0, want)
+}
+
+func TestUnencodedMessage(t *testing.T) {
+ m := NewMessage(SetEncoding(Unencoded))
+ m.SetHeaders(map[string][]string{
+ "From": {"from@example.com"},
+ "To": {"to@example.com"},
+ "Subject": {"Café"},
+ })
+ m.SetBody("text/html", "¡Hola, señor!")
+
+ want := &message{
+ from: "from@example.com",
+ to: []string{"to@example.com"},
+ content: "From: from@example.com\r\n" +
+ "To: to@example.com\r\n" +
+ "Subject: =?UTF-8?q?Caf=C3=A9?=\r\n" +
+ "Content-Type: text/html; charset=UTF-8\r\n" +
+ "Content-Transfer-Encoding: 8bit\r\n" +
+ "\r\n" +
+ "¡Hola, señor!",
+ }
+
+ testMessage(t, m, 0, want)
+}
+
+func TestRecipients(t *testing.T) {
+ m := NewMessage()
+ m.SetHeaders(map[string][]string{
+ "From": {"from@example.com"},
+ "To": {"to@example.com"},
+ "Cc": {"cc@example.com"},
+ "Bcc": {"bcc1@example.com", "bcc2@example.com"},
+ "Subject": {"Hello!"},
+ })
+ m.SetBody("text/plain", "Test message")
+
+ want := &message{
+ from: "from@example.com",
+ to: []string{"to@example.com", "cc@example.com", "bcc1@example.com", "bcc2@example.com"},
+ content: "From: from@example.com\r\n" +
+ "To: to@example.com\r\n" +
+ "Cc: cc@example.com\r\n" +
+ "Subject: Hello!\r\n" +
+ "Content-Type: text/plain; charset=UTF-8\r\n" +
+ "Content-Transfer-Encoding: quoted-printable\r\n" +
+ "\r\n" +
+ "Test message",
+ }
+
+ testMessage(t, m, 0, want)
+}
+
+func TestAlternative(t *testing.T) {
+ m := NewMessage()
+ m.SetHeader("From", "from@example.com")
+ m.SetHeader("To", "to@example.com")
+ m.SetBody("text/plain", "¡Hola, señor!")
+ m.AddAlternative("text/html", "¡<b>Hola</b>, <i>señor</i>!</h1>")
+
+ want := &message{
+ from: "from@example.com",
+ to: []string{"to@example.com"},
+ content: "From: from@example.com\r\n" +
+ "To: to@example.com\r\n" +
+ "Content-Type: multipart/alternative; boundary=_BOUNDARY_1_\r\n" +
+ "\r\n" +
+ "--_BOUNDARY_1_\r\n" +
+ "Content-Type: text/plain; charset=UTF-8\r\n" +
+ "Content-Transfer-Encoding: quoted-printable\r\n" +
+ "\r\n" +
+ "=C2=A1Hola, se=C3=B1or!\r\n" +
+ "--_BOUNDARY_1_\r\n" +
+ "Content-Type: text/html; charset=UTF-8\r\n" +
+ "Content-Transfer-Encoding: quoted-printable\r\n" +
+ "\r\n" +
+ "=C2=A1<b>Hola</b>, <i>se=C3=B1or</i>!</h1>\r\n" +
+ "--_BOUNDARY_1_--\r\n",
+ }
+
+ testMessage(t, m, 1, want)
+}
+
+func TestAttachmentOnly(t *testing.T) {
+ m := NewMessage()
+ m.SetHeader("From", "from@example.com")
+ m.SetHeader("To", "to@example.com")
+ m.Attach(mockCopyFile("/tmp/test.pdf"))
+
+ want := &message{
+ from: "from@example.com",
+ to: []string{"to@example.com"},
+ content: "From: from@example.com\r\n" +
+ "To: to@example.com\r\n" +
+ "Content-Type: application/pdf; name=\"test.pdf\"\r\n" +
+ "Content-Disposition: attachment; filename=\"test.pdf\"\r\n" +
+ "Content-Transfer-Encoding: base64\r\n" +
+ "\r\n" +
+ base64.StdEncoding.EncodeToString([]byte("Content of test.pdf")),
+ }
+
+ testMessage(t, m, 0, want)
+}
+
+func TestAttachment(t *testing.T) {
+ m := NewMessage()
+ m.SetHeader("From", "from@example.com")
+ m.SetHeader("To", "to@example.com")
+ m.SetBody("text/plain", "Test")
+ m.Attach(mockCopyFile("/tmp/test.pdf"))
+
+ want := &message{
+ from: "from@example.com",
+ to: []string{"to@example.com"},
+ content: "From: from@example.com\r\n" +
+ "To: to@example.com\r\n" +
+ "Content-Type: multipart/mixed; boundary=_BOUNDARY_1_\r\n" +
+ "\r\n" +
+ "--_BOUNDARY_1_\r\n" +
+ "Content-Type: text/plain; charset=UTF-8\r\n" +
+ "Content-Transfer-Encoding: quoted-printable\r\n" +
+ "\r\n" +
+ "Test\r\n" +
+ "--_BOUNDARY_1_\r\n" +
+ "Content-Type: application/pdf; name=\"test.pdf\"\r\n" +
+ "Content-Disposition: attachment; filename=\"test.pdf\"\r\n" +
+ "Content-Transfer-Encoding: base64\r\n" +
+ "\r\n" +
+ base64.StdEncoding.EncodeToString([]byte("Content of test.pdf")) + "\r\n" +
+ "--_BOUNDARY_1_--\r\n",
+ }
+
+ testMessage(t, m, 1, want)
+}
+
+func TestAttachmentsOnly(t *testing.T) {
+ m := NewMessage()
+ m.SetHeader("From", "from@example.com")
+ m.SetHeader("To", "to@example.com")
+ m.Attach(mockCopyFile("/tmp/test.pdf"))
+ m.Attach(mockCopyFile("/tmp/test.zip"))
+
+ want := &message{
+ from: "from@example.com",
+ to: []string{"to@example.com"},
+ content: "From: from@example.com\r\n" +
+ "To: to@example.com\r\n" +
+ "Content-Type: multipart/mixed; boundary=_BOUNDARY_1_\r\n" +
+ "\r\n" +
+ "--_BOUNDARY_1_\r\n" +
+ "Content-Type: application/pdf; name=\"test.pdf\"\r\n" +
+ "Content-Disposition: attachment; filename=\"test.pdf\"\r\n" +
+ "Content-Transfer-Encoding: base64\r\n" +
+ "\r\n" +
+ base64.StdEncoding.EncodeToString([]byte("Content of test.pdf")) + "\r\n" +
+ "--_BOUNDARY_1_\r\n" +
+ "Content-Type: application/zip; name=\"test.zip\"\r\n" +
+ "Content-Disposition: attachment; filename=\"test.zip\"\r\n" +
+ "Content-Transfer-Encoding: base64\r\n" +
+ "\r\n" +
+ base64.StdEncoding.EncodeToString([]byte("Content of test.zip")) + "\r\n" +
+ "--_BOUNDARY_1_--\r\n",
+ }
+
+ testMessage(t, m, 1, want)
+}
+
+func TestAttachments(t *testing.T) {
+ m := NewMessage()
+ m.SetHeader("From", "from@example.com")
+ m.SetHeader("To", "to@example.com")
+ m.SetBody("text/plain", "Test")
+ m.Attach(mockCopyFile("/tmp/test.pdf"))
+ m.Attach(mockCopyFile("/tmp/test.zip"))
+
+ want := &message{
+ from: "from@example.com",
+ to: []string{"to@example.com"},
+ content: "From: from@example.com\r\n" +
+ "To: to@example.com\r\n" +
+ "Content-Type: multipart/mixed; boundary=_BOUNDARY_1_\r\n" +
+ "\r\n" +
+ "--_BOUNDARY_1_\r\n" +
+ "Content-Type: text/plain; charset=UTF-8\r\n" +
+ "Content-Transfer-Encoding: quoted-printable\r\n" +
+ "\r\n" +
+ "Test\r\n" +
+ "--_BOUNDARY_1_\r\n" +
+ "Content-Type: application/pdf; name=\"test.pdf\"\r\n" +
+ "Content-Disposition: attachment; filename=\"test.pdf\"\r\n" +
+ "Content-Transfer-Encoding: base64\r\n" +
+ "\r\n" +
+ base64.StdEncoding.EncodeToString([]byte("Content of test.pdf")) + "\r\n" +
+ "--_BOUNDARY_1_\r\n" +
+ "Content-Type: application/zip; name=\"test.zip\"\r\n" +
+ "Content-Disposition: attachment; filename=\"test.zip\"\r\n" +
+ "Content-Transfer-Encoding: base64\r\n" +
+ "\r\n" +
+ base64.StdEncoding.EncodeToString([]byte("Content of test.zip")) + "\r\n" +
+ "--_BOUNDARY_1_--\r\n",
+ }
+
+ testMessage(t, m, 1, want)
+}
+
+func TestEmbedded(t *testing.T) {
+ m := NewMessage()
+ m.SetHeader("From", "from@example.com")
+ m.SetHeader("To", "to@example.com")
+ m.Embed(mockCopyFileWithHeader(m, "image1.jpg", map[string][]string{"Content-ID": {"<test-content-id>"}}))
+ m.Embed(mockCopyFile("image2.jpg"))
+ m.SetBody("text/plain", "Test")
+
+ want := &message{
+ from: "from@example.com",
+ to: []string{"to@example.com"},
+ content: "From: from@example.com\r\n" +
+ "To: to@example.com\r\n" +
+ "Content-Type: multipart/related; boundary=_BOUNDARY_1_\r\n" +
+ "\r\n" +
+ "--_BOUNDARY_1_\r\n" +
+ "Content-Type: text/plain; charset=UTF-8\r\n" +
+ "Content-Transfer-Encoding: quoted-printable\r\n" +
+ "\r\n" +
+ "Test\r\n" +
+ "--_BOUNDARY_1_\r\n" +
+ "Content-Type: image/jpeg; name=\"image1.jpg\"\r\n" +
+ "Content-Disposition: inline; filename=\"image1.jpg\"\r\n" +
+ "Content-ID: <test-content-id>\r\n" +
+ "Content-Transfer-Encoding: base64\r\n" +
+ "\r\n" +
+ base64.StdEncoding.EncodeToString([]byte("Content of image1.jpg")) + "\r\n" +
+ "--_BOUNDARY_1_\r\n" +
+ "Content-Type: image/jpeg; name=\"image2.jpg\"\r\n" +
+ "Content-Disposition: inline; filename=\"image2.jpg\"\r\n" +
+ "Content-ID: <image2.jpg>\r\n" +
+ "Content-Transfer-Encoding: base64\r\n" +
+ "\r\n" +
+ base64.StdEncoding.EncodeToString([]byte("Content of image2.jpg")) + "\r\n" +
+ "--_BOUNDARY_1_--\r\n",
+ }
+
+ testMessage(t, m, 1, want)
+}
+
+func TestFullMessage(t *testing.T) {
+ m := NewMessage()
+ m.SetHeader("From", "from@example.com")
+ m.SetHeader("To", "to@example.com")
+ m.SetBody("text/plain", "¡Hola, señor!")
+ m.AddAlternative("text/html", "¡<b>Hola</b>, <i>señor</i>!</h1>")
+ m.Attach(mockCopyFile("test.pdf"))
+ m.Embed(mockCopyFile("image.jpg"))
+
+ want := &message{
+ from: "from@example.com",
+ to: []string{"to@example.com"},
+ content: "From: from@example.com\r\n" +
+ "To: to@example.com\r\n" +
+ "Content-Type: multipart/mixed; boundary=_BOUNDARY_1_\r\n" +
+ "\r\n" +
+ "--_BOUNDARY_1_\r\n" +
+ "Content-Type: multipart/related; boundary=_BOUNDARY_2_\r\n" +
+ "\r\n" +
+ "--_BOUNDARY_2_\r\n" +
+ "Content-Type: multipart/alternative; boundary=_BOUNDARY_3_\r\n" +
+ "\r\n" +
+ "--_BOUNDARY_3_\r\n" +
+ "Content-Type: text/plain; charset=UTF-8\r\n" +
+ "Content-Transfer-Encoding: quoted-printable\r\n" +
+ "\r\n" +
+ "=C2=A1Hola, se=C3=B1or!\r\n" +
+ "--_BOUNDARY_3_\r\n" +
+ "Content-Type: text/html; charset=UTF-8\r\n" +
+ "Content-Transfer-Encoding: quoted-printable\r\n" +
+ "\r\n" +
+ "=C2=A1<b>Hola</b>, <i>se=C3=B1or</i>!</h1>\r\n" +
+ "--_BOUNDARY_3_--\r\n" +
+ "\r\n" +
+ "--_BOUNDARY_2_\r\n" +
+ "Content-Type: image/jpeg; name=\"image.jpg\"\r\n" +
+ "Content-Disposition: inline; filename=\"image.jpg\"\r\n" +
+ "Content-ID: <image.jpg>\r\n" +
+ "Content-Transfer-Encoding: base64\r\n" +
+ "\r\n" +
+ base64.StdEncoding.EncodeToString([]byte("Content of image.jpg")) + "\r\n" +
+ "--_BOUNDARY_2_--\r\n" +
+ "\r\n" +
+ "--_BOUNDARY_1_\r\n" +
+ "Content-Type: application/pdf; name=\"test.pdf\"\r\n" +
+ "Content-Disposition: attachment; filename=\"test.pdf\"\r\n" +
+ "Content-Transfer-Encoding: base64\r\n" +
+ "\r\n" +
+ base64.StdEncoding.EncodeToString([]byte("Content of test.pdf")) + "\r\n" +
+ "--_BOUNDARY_1_--\r\n",
+ }
+
+ testMessage(t, m, 3, want)
+
+ want = &message{
+ from: "from@example.com",
+ to: []string{"to@example.com"},
+ content: "From: from@example.com\r\n" +
+ "To: to@example.com\r\n" +
+ "Content-Type: text/plain; charset=UTF-8\r\n" +
+ "Content-Transfer-Encoding: quoted-printable\r\n" +
+ "\r\n" +
+ "Test reset",
+ }
+ m.Reset()
+ m.SetHeader("From", "from@example.com")
+ m.SetHeader("To", "to@example.com")
+ m.SetBody("text/plain", "Test reset")
+ testMessage(t, m, 0, want)
+}
+
+func TestQpLineLength(t *testing.T) {
+ m := NewMessage()
+ m.SetHeader("From", "from@example.com")
+ m.SetHeader("To", "to@example.com")
+ m.SetBody("text/plain",
+ strings.Repeat("0", 76)+"\r\n"+
+ strings.Repeat("0", 75)+"à\r\n"+
+ strings.Repeat("0", 74)+"à\r\n"+
+ strings.Repeat("0", 73)+"à\r\n"+
+ strings.Repeat("0", 72)+"à\r\n"+
+ strings.Repeat("0", 75)+"\r\n"+
+ strings.Repeat("0", 76)+"\n")
+
+ want := &message{
+ from: "from@example.com",
+ to: []string{"to@example.com"},
+ content: "From: from@example.com\r\n" +
+ "To: to@example.com\r\n" +
+ "Content-Type: text/plain; charset=UTF-8\r\n" +
+ "Content-Transfer-Encoding: quoted-printable\r\n" +
+ "\r\n" +
+ strings.Repeat("0", 75) + "=\r\n0\r\n" +
+ strings.Repeat("0", 75) + "=\r\n=C3=A0\r\n" +
+ strings.Repeat("0", 74) + "=\r\n=C3=A0\r\n" +
+ strings.Repeat("0", 73) + "=\r\n=C3=A0\r\n" +
+ strings.Repeat("0", 72) + "=C3=\r\n=A0\r\n" +
+ strings.Repeat("0", 75) + "\r\n" +
+ strings.Repeat("0", 75) + "=\r\n0\r\n",
+ }
+
+ testMessage(t, m, 0, want)
+}
+
+func TestBase64LineLength(t *testing.T) {
+ m := NewMessage(SetCharset("UTF-8"), SetEncoding(Base64))
+ m.SetHeader("From", "from@example.com")
+ m.SetHeader("To", "to@example.com")
+ m.SetBody("text/plain", strings.Repeat("0", 58))
+
+ want := &message{
+ from: "from@example.com",
+ to: []string{"to@example.com"},
+ content: "From: from@example.com\r\n" +
+ "To: to@example.com\r\n" +
+ "Content-Type: text/plain; charset=UTF-8\r\n" +
+ "Content-Transfer-Encoding: base64\r\n" +
+ "\r\n" +
+ strings.Repeat("MDAw", 19) + "\r\nMA==",
+ }
+
+ testMessage(t, m, 0, want)
+}
+
+func testMessage(t *testing.T, m *Message, bCount int, want *message) {
+ err := Send(stubSendMail(t, bCount, want), m)
+ if err != nil {
+ t.Error(err)
+ }
+}
+
+func stubSendMail(t *testing.T, bCount int, want *message) SendFunc {
+ return func(from string, to []string, m io.WriterTo) error {
+ if from != want.from {
+ t.Fatalf("Invalid from, got %q, want %q", from, want.from)
+ }
+
+ if len(to) != len(want.to) {
+ t.Fatalf("Invalid recipient count, \ngot %d: %q\nwant %d: %q",
+ len(to), to,
+ len(want.to), want.to,
+ )
+ }
+ for i := range want.to {
+ if to[i] != want.to[i] {
+ t.Fatalf("Invalid recipient, got %q, want %q",
+ to[i], want.to[i],
+ )
+ }
+ }
+
+ buf := new(bytes.Buffer)
+ _, err := m.WriteTo(buf)
+ if err != nil {
+ t.Error(err)
+ }
+ got := buf.String()
+ wantMsg := string("Mime-Version: 1.0\r\n" +
+ "Date: Wed, 25 Jun 2014 17:46:00 +0000\r\n" +
+ want.content)
+ if bCount > 0 {
+ boundaries := getBoundaries(t, bCount, got)
+ for i, b := range boundaries {
+ wantMsg = strings.Replace(wantMsg, "_BOUNDARY_"+strconv.Itoa(i+1)+"_", b, -1)
+ }
+ }
+
+ compareBodies(t, got, wantMsg)
+
+ return nil
+ }
+}
+
+func compareBodies(t *testing.T, got, want string) {
+ // We cannot do a simple comparison since the ordering of headers' fields
+ // is random.
+ gotLines := strings.Split(got, "\r\n")
+ wantLines := strings.Split(want, "\r\n")
+
+ // We only test for too many lines, missing lines are tested after
+ if len(gotLines) > len(wantLines) {
+ t.Fatalf("Message has too many lines, \ngot %d:\n%s\nwant %d:\n%s", len(gotLines), got, len(wantLines), want)
+ }
+
+ isInHeader := true
+ headerStart := 0
+ for i, line := range wantLines {
+ if line == gotLines[i] {
+ if line == "" {
+ isInHeader = false
+ } else if !isInHeader && len(line) > 2 && line[:2] == "--" {
+ isInHeader = true
+ headerStart = i + 1
+ }
+ continue
+ }
+
+ if !isInHeader {
+ missingLine(t, line, got, want)
+ }
+
+ isMissing := true
+ for j := headerStart; j < len(gotLines); j++ {
+ if gotLines[j] == "" {
+ break
+ }
+ if gotLines[j] == line {
+ isMissing = false
+ break
+ }
+ }
+ if isMissing {
+ missingLine(t, line, got, want)
+ }
+ }
+}
+
+func missingLine(t *testing.T, line, got, want string) {
+ t.Fatalf("Missing line %q\ngot:\n%s\nwant:\n%s", line, got, want)
+}
+
+func getBoundaries(t *testing.T, count int, m string) []string {
+ if matches := boundaryRegExp.FindAllStringSubmatch(m, count); matches != nil {
+ boundaries := make([]string, count)
+ for i, match := range matches {
+ boundaries[i] = match[1]
+ }
+ return boundaries
+ }
+
+ t.Fatal("Boundary not found in body")
+ return []string{""}
+}
+
+var boundaryRegExp = regexp.MustCompile("boundary=(\\w+)")
+
+func mockCopyFile(name string) (string, FileSetting) {
+ return name, SetCopyFunc(func(w io.Writer) error {
+ _, err := w.Write([]byte("Content of " + filepath.Base(name)))
+ return err
+ })
+}
+
+func mockCopyFileWithHeader(m *Message, name string, h map[string][]string) (string, FileSetting, FileSetting) {
+ name, f := mockCopyFile(name)
+ return name, f, SetHeader(h)
+}
+
+func BenchmarkFull(b *testing.B) {
+ discardFunc := SendFunc(func(from string, to []string, m io.WriterTo) error {
+ _, err := m.WriteTo(ioutil.Discard)
+ return err
+ })
+
+ m := NewMessage()
+ b.ResetTimer()
+ for n := 0; n < b.N; n++ {
+ m.SetAddressHeader("From", "from@example.com", "Señor From")
+ m.SetHeaders(map[string][]string{
+ "To": {"to@example.com"},
+ "Cc": {"cc@example.com"},
+ "Bcc": {"bcc1@example.com", "bcc2@example.com"},
+ "Subject": {"¡Hola, señor!"},
+ })
+ m.SetBody("text/plain", "¡Hola, señor!")
+ m.AddAlternative("text/html", "<p>¡Hola, señor!</p>")
+ m.Attach(mockCopyFile("benchmark.txt"))
+ m.Embed(mockCopyFile("benchmark.jpg"))
+
+ if err := Send(discardFunc, m); err != nil {
+ panic(err)
+ }
+ m.Reset()
+ }
+}
diff --git a/vendor/gopkg.in/gomail.v2/mime.go b/vendor/gopkg.in/gomail.v2/mime.go
new file mode 100644
index 000000000..51cba724b
--- /dev/null
+++ b/vendor/gopkg.in/gomail.v2/mime.go
@@ -0,0 +1,19 @@
+// +build go1.5
+
+package gomail
+
+import (
+ "mime"
+ "mime/quotedprintable"
+)
+
+var newQPWriter = quotedprintable.NewWriter
+
+type mimeEncoder struct {
+ mime.WordEncoder
+}
+
+var (
+ bEncoding = mimeEncoder{mime.BEncoding}
+ qEncoding = mimeEncoder{mime.QEncoding}
+)
diff --git a/vendor/gopkg.in/gomail.v2/mime_go14.go b/vendor/gopkg.in/gomail.v2/mime_go14.go
new file mode 100644
index 000000000..246e2e5e5
--- /dev/null
+++ b/vendor/gopkg.in/gomail.v2/mime_go14.go
@@ -0,0 +1,16 @@
+// +build !go1.5
+
+package gomail
+
+import "gopkg.in/alexcesaro/quotedprintable.v3"
+
+var newQPWriter = quotedprintable.NewWriter
+
+type mimeEncoder struct {
+ quotedprintable.WordEncoder
+}
+
+var (
+ bEncoding = mimeEncoder{quotedprintable.BEncoding}
+ qEncoding = mimeEncoder{quotedprintable.QEncoding}
+)
diff --git a/vendor/gopkg.in/gomail.v2/send.go b/vendor/gopkg.in/gomail.v2/send.go
new file mode 100644
index 000000000..3e6726509
--- /dev/null
+++ b/vendor/gopkg.in/gomail.v2/send.go
@@ -0,0 +1,117 @@
+package gomail
+
+import (
+ "errors"
+ "fmt"
+ "io"
+ "net/mail"
+)
+
+// Sender is the interface that wraps the Send method.
+//
+// Send sends an email to the given addresses.
+type Sender interface {
+ Send(from string, to []string, msg io.WriterTo) error
+}
+
+// SendCloser is the interface that groups the Send and Close methods.
+type SendCloser interface {
+ Sender
+ Close() error
+}
+
+// A SendFunc is a function that sends emails to the given adresses.
+//
+// The SendFunc type is an adapter to allow the use of ordinary functions as
+// email senders. If f is a function with the appropriate signature, SendFunc(f)
+// is a Sender object that calls f.
+type SendFunc func(from string, to []string, msg io.WriterTo) error
+
+// Send calls f(from, to, msg).
+func (f SendFunc) Send(from string, to []string, msg io.WriterTo) error {
+ return f(from, to, msg)
+}
+
+// Send sends emails using the given Sender.
+func Send(s Sender, msg ...*Message) error {
+ for i, m := range msg {
+ if err := send(s, m); err != nil {
+ return fmt.Errorf("gomail: could not send email %d: %v", i+1, err)
+ }
+ }
+
+ return nil
+}
+
+func send(s Sender, m *Message) error {
+ from, err := m.getFrom()
+ if err != nil {
+ return err
+ }
+
+ to, err := m.getRecipients()
+ if err != nil {
+ return err
+ }
+
+ if err := s.Send(from, to, m); err != nil {
+ return err
+ }
+
+ return nil
+}
+
+func (m *Message) getFrom() (string, error) {
+ from := m.header["Sender"]
+ if len(from) == 0 {
+ from = m.header["From"]
+ if len(from) == 0 {
+ return "", errors.New(`gomail: invalid message, "From" field is absent`)
+ }
+ }
+
+ return parseAddress(from[0])
+}
+
+func (m *Message) getRecipients() ([]string, error) {
+ n := 0
+ for _, field := range []string{"To", "Cc", "Bcc"} {
+ if addresses, ok := m.header[field]; ok {
+ n += len(addresses)
+ }
+ }
+ list := make([]string, 0, n)
+
+ for _, field := range []string{"To", "Cc", "Bcc"} {
+ if addresses, ok := m.header[field]; ok {
+ for _, a := range addresses {
+ addr, err := parseAddress(a)
+ if err != nil {
+ return nil, err
+ }
+ list = addAddress(list, addr)
+ }
+ }
+ }
+
+ return list, nil
+}
+
+func addAddress(list []string, addr string) []string {
+ for _, a := range list {
+ if addr == a {
+ return list
+ }
+ }
+
+ return append(list, addr)
+}
+
+func parseAddress(field string) (string, error) {
+ a, err := mail.ParseAddress(field)
+ if a == nil {
+ return "", err
+ }
+
+ return a.Address, err
+}
diff --git a/vendor/gopkg.in/gomail.v2/send_test.go b/vendor/gopkg.in/gomail.v2/send_test.go
new file mode 100644
index 000000000..ba59cd3dc
--- /dev/null
+++ b/vendor/gopkg.in/gomail.v2/send_test.go
@@ -0,0 +1,80 @@
+package gomail
+
+import (
+ "bytes"
+ "io"
+ "reflect"
+ "testing"
+)
+
+const (
+ testTo1 = "to1@example.com"
+ testTo2 = "to2@example.com"
+ testFrom = "from@example.com"
+ testBody = "Test message"
+ testMsg = "To: " + testTo1 + ", " + testTo2 + "\r\n" +
+ "From: " + testFrom + "\r\n" +
+ "Mime-Version: 1.0\r\n" +
+ "Date: Wed, 25 Jun 2014 17:46:00 +0000\r\n" +
+ "Content-Type: text/plain; charset=UTF-8\r\n" +
+ "Content-Transfer-Encoding: quoted-printable\r\n" +
+ "\r\n" +
+ testBody
+)
+
+type mockSender SendFunc
+
+func (s mockSender) Send(from string, to []string, msg io.WriterTo) error {
+ return s(from, to, msg)
+}
+
+type mockSendCloser struct {
+ mockSender
+ close func() error
+}
+
+func (s *mockSendCloser) Close() error {
+ return s.close()
+}
+
+func TestSend(t *testing.T) {
+ s := &mockSendCloser{
+ mockSender: stubSend(t, testFrom, []string{testTo1, testTo2}, testMsg),
+ close: func() error {
+ t.Error("Close() should not be called in Send()")
+ return nil
+ },
+ }
+ if err := Send(s, getTestMessage()); err != nil {
+ t.Errorf("Send(): %v", err)
+ }
+}
+
+func getTestMessage() *Message {
+ m := NewMessage()
+ m.SetHeader("From", testFrom)
+ m.SetHeader("To", testTo1, testTo2)
+ m.SetBody("text/plain", testBody)
+
+ return m
+}
+
+func stubSend(t *testing.T, wantFrom string, wantTo []string, wantBody string) mockSender {
+ return func(from string, to []string, msg io.WriterTo) error {
+ if from != wantFrom {
+ t.Errorf("invalid from, got %q, want %q", from, wantFrom)
+ }
+ if !reflect.DeepEqual(to, wantTo) {
+ t.Errorf("invalid to, got %v, want %v", to, wantTo)
+ }
+
+ buf := new(bytes.Buffer)
+ _, err := msg.WriteTo(buf)
+ if err != nil {
+ t.Fatal(err)
+ }
+ compareBodies(t, buf.String(), wantBody)
+
+ return nil
+ }
+}
diff --git a/vendor/gopkg.in/gomail.v2/smtp.go b/vendor/gopkg.in/gomail.v2/smtp.go
new file mode 100644
index 000000000..cf773a102
--- /dev/null
+++ b/vendor/gopkg.in/gomail.v2/smtp.go
@@ -0,0 +1,175 @@
+package gomail
+
+import (
+ "crypto/tls"
+ "fmt"
+ "io"
+ "net"
+ "net/smtp"
+)
+
+// A Dialer is a dialer to an SMTP server.
+type Dialer struct {
+ // Host represents the host of the SMTP server.
+ Host string
+ // Port represents the port of the SMTP server.
+ Port int
+ // Auth represents the authentication mechanism used to authenticate to the
+ // SMTP server.
+ Auth smtp.Auth
+ // SSL defines whether an SSL connection is used. It should be false in
+ // most cases since the authentication mechanism should use the STARTTLS
+ // extension instead.
+ SSL bool
+ // TSLConfig represents the TLS configuration used for the TLS (when the
+ // STARTTLS extension is used) or SSL connection.
+ TLSConfig *tls.Config
+}
+
+// NewPlainDialer returns a Dialer. The given parameters are used to connect to
+// the SMTP server via a PLAIN authentication mechanism.
+//
+// It fallbacks to the LOGIN mechanism if it is the only mechanism advertised by
+// the server.
+func NewPlainDialer(host string, port int, username, password string) *Dialer {
+ return &Dialer{
+ Host: host,
+ Port: port,
+ Auth: &plainAuth{
+ username: username,
+ password: password,
+ host: host,
+ },
+ SSL: port == 465,
+ }
+}
+
+// Dial dials and authenticates to an SMTP server. The returned SendCloser
+// should be closed when done using it.
+func (d *Dialer) Dial() (SendCloser, error) {
+ c, err := d.dial()
+ if err != nil {
+ return nil, err
+ }
+
+ if d.Auth != nil {
+ if ok, _ := c.Extension("AUTH"); ok {
+ if err = c.Auth(d.Auth); err != nil {
+ c.Close()
+ return nil, err
+ }
+ }
+ }
+
+ return &smtpSender{c}, nil
+}
+
+func (d *Dialer) dial() (smtpClient, error) {
+ if d.SSL {
+ return d.sslDial()
+ }
+ return d.starttlsDial()
+}
+
+func (d *Dialer) starttlsDial() (smtpClient, error) {
+ c, err := smtpDial(addr(d.Host, d.Port))
+ if err != nil {
+ return nil, err
+ }
+
+ if ok, _ := c.Extension("STARTTLS"); ok {
+ if err := c.StartTLS(d.tlsConfig()); err != nil {
+ c.Close()
+ return nil, err
+ }
+ }
+
+ return c, nil
+}
+
+func (d *Dialer) sslDial() (smtpClient, error) {
+ conn, err := tlsDial("tcp", addr(d.Host, d.Port), d.tlsConfig())
+ if err != nil {
+ return nil, err
+ }
+
+ return newClient(conn, d.Host)
+}
+
+func (d *Dialer) tlsConfig() *tls.Config {
+ if d.TLSConfig == nil {
+ return &tls.Config{ServerName: d.Host}
+ }
+
+ return d.TLSConfig
+}
+
+func addr(host string, port int) string {
+ return fmt.Sprintf("%s:%d", host, port)
+}
+
+// DialAndSend opens a connection to the SMTP server, sends the given emails and
+// closes the connection.
+func (d *Dialer) DialAndSend(m ...*Message) error {
+ s, err := d.Dial()
+ if err != nil {
+ return err
+ }
+ defer s.Close()
+
+ return Send(s, m...)
+}
+
+type smtpSender struct {
+ smtpClient
+}
+
+func (c *smtpSender) Send(from string, to []string, msg io.WriterTo) error {
+ if err := c.Mail(from); err != nil {
+ return err
+ }
+
+ for _, addr := range to {
+ if err := c.Rcpt(addr); err != nil {
+ return err
+ }
+ }
+
+ w, err := c.Data()
+ if err != nil {
+ return err
+ }
+
+ if _, err = msg.WriteTo(w); err != nil {
+ w.Close()
+ return err
+ }
+
+ return w.Close()
+}
+
+func (c *smtpSender) Close() error {
+ return c.Quit()
+}
+
+// Stubbed out for tests.
+var (
+ smtpDial = func(addr string) (smtpClient, error) {
+ return smtp.Dial(addr)
+ }
+ tlsDial = tls.Dial
+ newClient = func(conn net.Conn, host string) (smtpClient, error) {
+ return smtp.NewClient(conn, host)
+ }
+)
+
+type smtpClient interface {
+ Extension(string) (bool, string)
+ StartTLS(*tls.Config) error
+ Auth(smtp.Auth) error
+ Mail(string) error
+ Rcpt(string) error
+ Data() (io.WriteCloser, error)
+ Quit() error
+ Close() error
+}
diff --git a/vendor/gopkg.in/gomail.v2/smtp_test.go b/vendor/gopkg.in/gomail.v2/smtp_test.go
new file mode 100644
index 000000000..c8503489b
--- /dev/null
+++ b/vendor/gopkg.in/gomail.v2/smtp_test.go
@@ -0,0 +1,254 @@
+package gomail
+
+import (
+ "bytes"
+ "crypto/tls"
+ "io"
+ "net"
+ "net/smtp"
+ "reflect"
+ "testing"
+)
+
+const (
+ testPort = 587
+ testSSLPort = 465
+)
+
+var (
+ testTLSConn = &tls.Conn{}
+ testConfig = &tls.Config{InsecureSkipVerify: true}
+)
+
+func TestDialer(t *testing.T) {
+ d := NewPlainDialer(testHost, testPort, "user", "pwd")
+ testSendMail(t, d, []string{
+ "Extension STARTTLS",
+ "StartTLS",
+ "Extension AUTH",
+ "Auth",
+ "Mail " + testFrom,
+ "Rcpt " + testTo1,
+ "Rcpt " + testTo2,
+ "Data",
+ "Write message",
+ "Close writer",
+ "Quit",
+ "Close",
+ })
+}
+
+func TestDialerSSL(t *testing.T) {
+ d := NewPlainDialer(testHost, testSSLPort, "user", "pwd")
+ testSendMail(t, d, []string{
+ "Extension AUTH",
+ "Auth",
+ "Mail " + testFrom,
+ "Rcpt " + testTo1,
+ "Rcpt " + testTo2,
+ "Data",
+ "Write message",
+ "Close writer",
+ "Quit",
+ "Close",
+ })
+}
+
+func TestDialerConfig(t *testing.T) {
+ d := NewPlainDialer(testHost, testPort, "user", "pwd")
+ d.TLSConfig = testConfig
+ testSendMail(t, d, []string{
+ "Extension STARTTLS",
+ "StartTLS",
+ "Extension AUTH",
+ "Auth",
+ "Mail " + testFrom,
+ "Rcpt " + testTo1,
+ "Rcpt " + testTo2,
+ "Data",
+ "Write message",
+ "Close writer",
+ "Quit",
+ "Close",
+ })
+}
+
+func TestDialerSSLConfig(t *testing.T) {
+ d := NewPlainDialer(testHost, testSSLPort, "user", "pwd")
+ d.TLSConfig = testConfig
+ testSendMail(t, d, []string{
+ "Extension AUTH",
+ "Auth",
+ "Mail " + testFrom,
+ "Rcpt " + testTo1,
+ "Rcpt " + testTo2,
+ "Data",
+ "Write message",
+ "Close writer",
+ "Quit",
+ "Close",
+ })
+}
+
+func TestDialerNoAuth(t *testing.T) {
+ d := &Dialer{
+ Host: testHost,
+ Port: testPort,
+ }
+ testSendMail(t, d, []string{
+ "Extension STARTTLS",
+ "StartTLS",
+ "Mail " + testFrom,
+ "Rcpt " + testTo1,
+ "Rcpt " + testTo2,
+ "Data",
+ "Write message",
+ "Close writer",
+ "Quit",
+ "Close",
+ })
+}
+
+type mockClient struct {
+ t *testing.T
+ i int
+ want []string
+ addr string
+ auth smtp.Auth
+ config *tls.Config
+}
+
+func (c *mockClient) Extension(ext string) (bool, string) {
+ c.do("Extension " + ext)
+ return true, ""
+}
+
+func (c *mockClient) StartTLS(config *tls.Config) error {
+ assertConfig(c.t, config, c.config)
+ c.do("StartTLS")
+ return nil
+}
+
+func (c *mockClient) Auth(a smtp.Auth) error {
+ assertAuth(c.t, a, c.auth)
+ c.do("Auth")
+ return nil
+}
+
+func (c *mockClient) Mail(from string) error {
+ c.do("Mail " + from)
+ return nil
+}
+
+func (c *mockClient) Rcpt(to string) error {
+ c.do("Rcpt " + to)
+ return nil
+}
+
+func (c *mockClient) Data() (io.WriteCloser, error) {
+ c.do("Data")
+ return &mockWriter{c: c, want: testMsg}, nil
+}
+
+func (c *mockClient) Quit() error {
+ c.do("Quit")
+ return nil
+}
+
+func (c *mockClient) Close() error {
+ c.do("Close")
+ return nil
+}
+
+func (c *mockClient) do(cmd string) {
+ if c.i >= len(c.want) {
+ c.t.Fatalf("Invalid command %q", cmd)
+ }
+
+ if cmd != c.want[c.i] {
+ c.t.Fatalf("Invalid command, got %q, want %q", cmd, c.want[c.i])
+ }
+ c.i++
+}
+
+type mockWriter struct {
+ want string
+ c *mockClient
+ buf bytes.Buffer
+}
+
+func (w *mockWriter) Write(p []byte) (int, error) {
+ if w.buf.Len() == 0 {
+ w.c.do("Write message")
+ }
+ w.buf.Write(p)
+ return len(p), nil
+}
+
+func (w *mockWriter) Close() error {
+ compareBodies(w.c.t, w.buf.String(), w.want)
+ w.c.do("Close writer")
+ return nil
+}
+
+func testSendMail(t *testing.T, d *Dialer, want []string) {
+ testClient := &mockClient{
+ t: t,
+ want: want,
+ addr: addr(d.Host, d.Port),
+ auth: testAuth,
+ config: d.TLSConfig,
+ }
+
+ smtpDial = func(addr string) (smtpClient, error) {
+ assertAddr(t, addr, testClient.addr)
+ return testClient, nil
+ }
+
+ tlsDial = func(network, addr string, config *tls.Config) (*tls.Conn, error) {
+ if network != "tcp" {
+ t.Errorf("Invalid network, got %q, want tcp", network)
+ }
+ assertAddr(t, addr, testClient.addr)
+ assertConfig(t, config, testClient.config)
+ return testTLSConn, nil
+ }
+
+ newClient = func(conn net.Conn, host string) (smtpClient, error) {
+ if conn != testTLSConn {
+ t.Error("Invalid TLS connection used")
+ }
+ if host != testHost {
+ t.Errorf("Invalid host, got %q, want %q", host, testHost)
+ }
+ return testClient, nil
+ }
+
+ if err := d.DialAndSend(getTestMessage()); err != nil {
+ t.Error(err)
+ }
+}
+
+func assertAuth(t *testing.T, got, want smtp.Auth) {
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("Invalid auth, got %#v, want %#v", got, want)
+ }
+}
+
+func assertAddr(t *testing.T, got, want string) {
+ if got != want {
+ t.Errorf("Invalid addr, got %q, want %q", got, want)
+ }
+}
+
+func assertConfig(t *testing.T, got, want *tls.Config) {
+ if want == nil {
+ want = &tls.Config{ServerName: testHost}
+ }
+ if got.ServerName != want.ServerName {
+ t.Errorf("Invalid field ServerName in config, got %q, want %q", got.ServerName, want.ServerName)
+ }
+ if got.InsecureSkipVerify != want.InsecureSkipVerify {
+ t.Errorf("Invalid field InsecureSkipVerify in config, got %v, want %v", got.InsecureSkipVerify, want.InsecureSkipVerify)
+ }
+}
diff --git a/vendor/gopkg.in/gomail.v2/writeto.go b/vendor/gopkg.in/gomail.v2/writeto.go
new file mode 100644
index 000000000..57a1dd7f1
--- /dev/null
+++ b/vendor/gopkg.in/gomail.v2/writeto.go
@@ -0,0 +1,242 @@
+package gomail
+
+import (
+ "encoding/base64"
+ "errors"
+ "io"
+ "mime"
+ "mime/multipart"
+ "path/filepath"
+ "time"
+)
+
+// WriteTo implements io.WriterTo. It dumps the whole message into w.
+func (m *Message) WriteTo(w io.Writer) (int64, error) {
+ mw := &messageWriter{w: w}
+ mw.writeMessage(m)
+ return mw.n, mw.err
+}
+
+func (w *messageWriter) writeMessage(m *Message) {
+ if _, ok := m.header["Mime-Version"]; !ok {
+ w.writeString("Mime-Version: 1.0\r\n")
+ }
+ if _, ok := m.header["Date"]; !ok {
+ w.writeHeader("Date", m.FormatDate(now()))
+ }
+ w.writeHeaders(m.header)
+
+ if m.hasMixedPart() {
+ w.openMultipart("mixed")
+ }
+
+ if m.hasRelatedPart() {
+ w.openMultipart("related")
+ }
+
+ if m.hasAlternativePart() {
+ w.openMultipart("alternative")
+ }
+ for _, part := range m.parts {
+ w.writeHeaders(part.header)
+ w.writeBody(part.copier, m.encoding)
+ }
+ if m.hasAlternativePart() {
+ w.closeMultipart()
+ }
+
+ w.addFiles(m.embedded, false)
+ if m.hasRelatedPart() {
+ w.closeMultipart()
+ }
+
+ w.addFiles(m.attachments, true)
+ if m.hasMixedPart() {
+ w.closeMultipart()
+ }
+}
+
+func (m *Message) hasMixedPart() bool {
+ return (len(m.parts) > 0 && len(m.attachments) > 0) || len(m.attachments) > 1
+}
+
+func (m *Message) hasRelatedPart() bool {
+ return (len(m.parts) > 0 && len(m.embedded) > 0) || len(m.embedded) > 1
+}
+
+func (m *Message) hasAlternativePart() bool {
+ return len(m.parts) > 1
+}
+
+type messageWriter struct {
+ w io.Writer
+ n int64
+ writers [3]*multipart.Writer
+ partWriter io.Writer
+ depth uint8
+ err error
+}
+
+func (w *messageWriter) openMultipart(mimeType string) {
+ mw := multipart.NewWriter(w)
+ contentType := "multipart/" + mimeType + "; boundary=" + mw.Boundary()
+ w.writers[w.depth] = mw
+
+ if w.depth == 0 {
+ w.writeHeader("Content-Type", contentType)
+ w.writeString("\r\n")
+ } else {
+ w.createPart(map[string][]string{
+ "Content-Type": {contentType},
+ })
+ }
+ w.depth++
+}
+
+func (w *messageWriter) createPart(h map[string][]string) {
+ w.partWriter, w.err = w.writers[w.depth-1].CreatePart(h)
+}
+
+func (w *messageWriter) closeMultipart() {
+ if w.depth > 0 {
+ w.writers[w.depth-1].Close()
+ w.depth--
+ }
+}
+
+func (w *messageWriter) addFiles(files []*file, isAttachment bool) {
+ for _, f := range files {
+ if _, ok := f.Header["Content-Type"]; !ok {
+ mediaType := mime.TypeByExtension(filepath.Ext(f.Name))
+ if mediaType == "" {
+ mediaType = "application/octet-stream"
+ }
+ f.setHeader("Content-Type", mediaType+`; name="`+f.Name+`"`)
+ }
+
+ if _, ok := f.Header["Content-Transfer-Encoding"]; !ok {
+ f.setHeader("Content-Transfer-Encoding", string(Base64))
+ }
+
+ if _, ok := f.Header["Content-Disposition"]; !ok {
+ var disp string
+ if isAttachment {
+ disp = "attachment"
+ } else {
+ disp = "inline"
+ }
+ f.setHeader("Content-Disposition", disp+`; filename="`+f.Name+`"`)
+ }
+
+ if !isAttachment {
+ if _, ok := f.Header["Content-ID"]; !ok {
+ f.setHeader("Content-ID", "<"+f.Name+">")
+ }
+ }
+ w.writeHeaders(f.Header)
+ w.writeBody(f.CopyFunc, Base64)
+ }
+}
+
+func (w *messageWriter) Write(p []byte) (int, error) {
+ if w.err != nil {
+ return 0, errors.New("gomail: cannot write as writer is in error")
+ }
+
+ var n int
+ n, w.err = w.w.Write(p)
+ w.n += int64(n)
+ return n, w.err
+}
+
+func (w *messageWriter) writeString(s string) {
+ n, _ := io.WriteString(w.w, s)
+ w.n += int64(n)
+}
+
+func (w *messageWriter) writeStrings(a []string, sep string) {
+ if len(a) > 0 {
+ w.writeString(a[0])
+ if len(a) == 1 {
+ return
+ }
+ }
+ for _, s := range a[1:] {
+ w.writeString(sep)
+ w.writeString(s)
+ }
+}
+
+func (w *messageWriter) writeHeader(k string, v ...string) {
+ w.writeString(k)
+ w.writeString(": ")
+ w.writeStrings(v, ", ")
+ w.writeString("\r\n")
+}
+
+func (w *messageWriter) writeHeaders(h map[string][]string) {
+ if w.depth == 0 {
+ for k, v := range h {
+ if k != "Bcc" {
+ w.writeHeader(k, v...)
+ }
+ }
+ } else {
+ w.createPart(h)
+ }
+}
+
+func (w *messageWriter) writeBody(f func(io.Writer) error, enc Encoding) {
+ var subWriter io.Writer
+ if w.depth == 0 {
+ w.writeString("\r\n")
+ subWriter = w.w
+ } else {
+ subWriter = w.partWriter
+ }
+
+ if enc == Base64 {
+ wc := base64.NewEncoder(base64.StdEncoding, newBase64LineWriter(subWriter))
+ w.err = f(wc)
+ wc.Close()
+ } else if enc == Unencoded {
+ w.err = f(subWriter)
+ } else {
+ wc := newQPWriter(subWriter)
+ w.err = f(wc)
+ wc.Close()
+ }
+}
+
+// As required by RFC 2045, 6.7. (page 21) for quoted-printable, and
+// RFC 2045, 6.8. (page 25) for base64.
+const maxLineLen = 76
+
+// base64LineWriter limits text encoded in base64 to 76 characters per line
+type base64LineWriter struct {
+ w io.Writer
+ lineLen int
+}
+
+func newBase64LineWriter(w io.Writer) *base64LineWriter {
+ return &base64LineWriter{w: w}
+}
+
+func (w *base64LineWriter) Write(p []byte) (int, error) {
+ n := 0
+ for len(p)+w.lineLen > maxLineLen {
+ w.w.Write(p[:maxLineLen-w.lineLen])
+ w.w.Write([]byte("\r\n"))
+ p = p[maxLineLen-w.lineLen:]
+ n += maxLineLen - w.lineLen
+ w.lineLen = 0
+ }
+
+ w.w.Write(p)
+ w.lineLen += len(p)
+
+ return n + len(p), nil
+}
+
+// Stubbed out for testing.
+var now = time.Now
diff --git a/vendor/gopkg.in/yaml.v2/scannerc.go b/vendor/gopkg.in/yaml.v2/scannerc.go
index 25808000f..2c9d5111f 100644
--- a/vendor/gopkg.in/yaml.v2/scannerc.go
+++ b/vendor/gopkg.in/yaml.v2/scannerc.go
@@ -9,7 +9,7 @@ import (
// ************
//
// The following notes assume that you are familiar with the YAML specification
-// (http://yaml.org/spec/cvs/current.html). We mostly follow it, although in
+// (http://yaml.org/spec/1.2/spec.html). We mostly follow it, although in
// some cases we are less restrictive that it requires.
//
// The process of transforming a YAML stream into a sequence of events is